假设我有一个可以升至-1/2幂的方阵。
我想将方形矩阵表示为numpy.ndarray
到-1/2。
注意我想将矩阵提升为非整数幂。我不希望将矩阵的每个元素都提升为非整数幂。
我知道我可以使用numpy.linalg.matrix_power
将矩阵提升为整数幂,如How to raise a numpy array to a power?
如何将numpy.ndarray
提升为非整数幂?
答案 0 :(得分:4)
SciPy有scipy.linalg.sqrtm
,它计算矩阵平方根。目前尚不清楚它是否试图计算任何特定的平方根 - 例如,主平方根 - 但如果输入具有平方根,sqrtm
将计算一个。因此,你可以做到
invsqrt = scipy.linalg.sqrtm(scipy.linalg.inv(input_matrix))
虽然你可能想要做一些错误处理。
答案 1 :(得分:3)
无法保证可以将一般n x n矩阵提升到给定的非整数幂。这个操作是针对正整数幂定义的,并且使用Maclaurin系列,您可以定义矩阵指数函数来近似矩阵的其他函数。
然而,为了能够将矩阵提升到任意幂,你还必须对矩阵对数有一个连贯的定义,它只能为可逆矩阵定义明确,并且涉及到关于唯一性和元素场的一些微妙之处。它被定义了。
这在this math.stackexchange.com answer处得到了相当好的报道。
所以一般来说,这不是对任意n x n矩阵的明确定义的操作,因此它作为ndarray
上的一般可用函数没有意义。
这就像要求一个名为“inverse
”的函数来计算任意2D数组的逆(不是伪逆或任何近似,而是“实际”逆)。这种功能通常不存在,因为存在不可逆的2D阵列。
这是一个狭隘的API决定,是否有一些声称计算它的函数,如果它可以检测到无效的输入参数(例如numpy.linalg.inv
)而仅仅抛出异常,而不是仅提供该功能并期望用户编写自己的函数来执行此操作并处理检查参数有效性,引发异常或任何需要的故障情况行为。
inv
无处不在,足以保证这种努力,而开箱即用的任意权力则不然。