在Python中,如何将表示为numpy.ndarray的平方矩阵提升为非整数幂?

在Python中,如何将表示为numpy.ndarray的平方矩阵提升为非整数幂?,python,numpy,matrix,exponent,Python,Numpy,Matrix,Exponent,假设我有一个平方矩阵,可以提升到-1/2次方。 我想将表示为numpy.ndarray的方阵提高到-1/2 注意,我想将矩阵提升为非整数次幂。我不想将矩阵的每个元素都提升为非整数次幂 我知道我可以使用numpy.linalg.matrix\u power将矩阵提升为整数次幂,如中所述 如何将numpy.ndarray提升为非整数幂?不能保证一般的nxn矩阵可以提升为给定的非整数幂。此操作对于正整数幂定义良好,然后使用Maclaurin级数可以定义一个矩阵指数函数来逼近矩阵的其他函数 但是,要将矩

假设我有一个平方矩阵,可以提升到-1/2次方。 我想将表示为
numpy.ndarray
的方阵提高到-1/2

注意,我想将矩阵提升为非整数次幂。我不想将矩阵的每个元素都提升为非整数次幂

我知道我可以使用
numpy.linalg.matrix\u power
将矩阵提升为整数次幂,如中所述


如何将
numpy.ndarray
提升为非整数幂?

不能保证一般的nxn矩阵可以提升为给定的非整数幂。此操作对于正整数幂定义良好,然后使用Maclaurin级数可以定义一个矩阵指数函数来逼近矩阵的其他函数

但是,要将矩阵提升为任意幂,还必须对矩阵对数有一个一致的定义,这仅适用于可逆矩阵,并且涉及到关于唯一性和定义它的元素域的一些微妙之处

这一点在本章中有相当好的阐述

因此,一般来说,这不是对任意nxn矩阵的定义良好的操作,因此它作为
ndarray
上的通用函数没有意义

这就像要求一个名为“
inverse
”的函数来计算任意二维阵列的逆(不是伪逆或任何近似,而是“实际”逆)。这样的函数一般不存在,因为存在不可逆的二维数组

这有点像是一个狭隘的API决定,即是否有一些函数声称要计算它,并且如果它能够检测到无效的输入参数,例如
numpy.linalg.inv
,则只会抛出异常,而不是仅仅提供该功能,并期望用户编写自己的函数来完成它,并处理检查参数有效性、引发异常或任何需要的失败案例行为

inv
无处不在,足以保证这一努力,而开箱即用的任意幂则不然。

SciPy有,它计算矩阵平方根。不清楚它是否尝试计算任何特定的平方根(例如,主平方根),但如果输入有平方根,
sqrtm
将计算一个。因此,你可以这样做

invsqrt = scipy.linalg.sqrtm(scipy.linalg.inv(input_matrix))

尽管您可能需要进行一些错误处理。

如果您指的是矩阵M,其中
numpy.allclose(原始矩阵,numpy.linalg.inv(M.dot(M)))
包含哪一个这样的M?如果你想要元素逆平方根,那就是原始矩阵**-0.5,在我的例子中,M是协方差。我想把矩阵(不是每个元素)提高到-1/2次方。请参阅