【问题标题】:How to raise a numpy.matrix to non-integer power?如何将 numpy.matrix 提高到非整数幂?
【发布时间】:2016-03-28 08:46:15
【问题描述】:

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

我可以使用numpyscipy 执行此操作吗?

注意:

这不是一个元素操作。如this post 所述,它是一个矩阵(在线性代数中)提升到一定程度。

【问题讨论】:

  • 它应该与数组一起使用。就个人而言,我总是使用数组。有时会导致代码有点笨拙,但我不必区分矩阵和数组对象。
  • 该问题与stackoverflow.com/questions/30406681/… 重复,但答案重叠不多。

标签: python numpy matrix scipy


【解决方案1】:

你可以使用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]])

【讨论】:

  • 太棒了!这正是我想要的。谢谢。
【解决方案2】:

从这个question可以看出,矩阵的幂可以改写为:

此代码使用 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]])

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多