【问题标题】:In Python, how can I raise a square matrix represented as a numpy.ndarray to non-integer powers?在 Python 中,如何将表示为 numpy.ndarray 的方阵提高到非整数幂?
【发布时间】:2015-05-22 22:21:25
【问题描述】:

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

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

我知道我可以使用numpy.linalg.matrix_power 将矩阵提升到整数幂,如How to raise a numpy array to a power? 中所述

如何将numpy.ndarray 提高到非整数幂?

【问题讨论】:

  • 如果你的意思是一个矩阵M,其中numpy.allclose(original_matrix, numpy.linalg.inv(M.dot(M))) 成立,你想要哪个这样的M?如果你想要元素的平方根逆,那就是original_matrix**-0.5
  • @user2357112 在我的例子中 M 是一个协方差。我想将矩阵(不是每个元素)提高到 -1/2 次方。

标签: python numpy matrix exponent


【解决方案1】:

SciPy 有scipy.linalg.sqrtm,它计算一个矩阵的平方根。目前尚不清楚它是否尝试计算任何特定的平方根 - 例如,主平方根 - 但如果输入有平方根,sqrtm 将计算一个。因此,您可以这样做

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

虽然您可能想要进行一些错误处理。

【讨论】:

    【解决方案2】:

    不能保证一般 n x n 矩阵可以提升到给定的非整数幂。此操作对于正整数幂是明确定义的,然后使用 Maclaurin 级数,您可以定义一个矩阵指数函数来逼近矩阵的其他函数。

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

    this math.stackexchange.com answer 对此进行了很好的介绍。

    因此,一般而言,这不是对任意 n x n 矩阵的定义明确的操作,因此作为 ndarray 上的通用函数没有意义。

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

    对于是否存在一些声称计算它的函数并且如果它可以检测到无效的输入参数(例如numpy.linalg.inv)仅仅抛出异常,这在某种程度上是一个狭隘的 API 决定,而不是仅仅不提供该功能并期望用户编写自己的函数来执行此操作并处理检查参数有效性、引发异常或任何需要的失败案例行为。

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

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 2018-07-12
      • 1970-01-01
      • 2021-09-09
      • 2018-12-14
      • 2012-09-15
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多