在**
为运营商numpy.matrix
不支持非整数次幂:
>>> m matrix([[ 1. , 0. ], [ 0.5, 0.5]]) >>> m ** 2.5 TypeError: exponent must be an integer
我想要的是
octave:14> [1 0; .5 .5] ^ 2.5 ans = 1.00000 0.00000 0.82322 0.17678
我可以做到这一点numpy
还是scipy
?
这不是元素操作.正如本文所述,这是一个提升到一定功率的矩阵(在线性代数中).
你可以使用scipy.linalg.fractional_matrix_power:
>>> m matrix([[ 1. , 0. ], [ 0.5, 0.5]]) >>> scipy.linalg.fractional_matrix_power(m, 2.5) array([[ 1. , 0. ], [ 0.8232233, 0.1767767]])
从这个问题可以看出,矩阵的强大功能可以改写为:.
这段代码使用了scipy.linalg,结果与Octave相同:
import numpy as np from scipy.linalg import logm, expm M = np.matrix([[ 1. , 0. ],[ 0.5, 0.5]]) x = 2.5 A = logm(M)*x P = expm(A)
这是P的输出:
Out[19]: array([[ 1. , -0. ], [ 0.8232233, 0.1767767]])