python - 将对角矩阵提高到负幂 1/2

标签 python numpy matrix

我正在尝试计算具有以下等式的矩阵。

S = (D^−1/2) * W * (D^−1/2)

其中 D 是这种形式的对角矩阵:

array([[ 0.59484625,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.58563893,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.58280472,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.58216725]])

W:

array([[ 0.        ,  0.92311635,  0.94700586,  0.95599748],
       [ 0.92311635,  0.        ,  0.997553  ,  0.99501248],
       [ 0.94700586,  0.997553  ,  0.        ,  0.9995501 ],
       [ 0.95599748,  0.99501248,  0.9995501 ,  0.        ]])

我尝试使用 numpy 函数 linalg.matrix_power(D,-1/2) 计算 D^-1/2numpy.power(D,-1/2)matrix_power 函数引发 TypeError: exponent must be an integernumpy.power 函数引发 RuntimeWarning: divide by zero encountered in power

如何计算对角矩阵的负幂 -1/2。请帮忙。

最佳答案

如果您可以更新 D(就像在您自己的答案中一样),那么只需更新其对角线索引处的项目,然后调用 np.dot:

>>> D[np.diag_indices(4)] = 1/ (D.diagonal()**0.5)
>>> np.dot(D, W).dot(D)
array([[ 0.        ,  0.32158153,  0.32830723,  0.33106193],
       [ 0.32158153,  0.        ,  0.34047794,  0.33923936],
       [ 0.32830723,  0.34047794,  0.        ,  0.33913717],
       [ 0.33106193,  0.33923936,  0.33913717,  0.        ]])

或者创建一个新的 zeros 数组,然后用 1/(D.diagonal()**0.5) 填充它的对角线元素:

>>> arr = np.zeros(D.shape)
>>> np.fill_diagonal(arr, 1/ (D.diagonal()**0.5))
>>> np.dot(arr, W).dot(arr)
array([[ 0.        ,  0.32158153,  0.32830723,  0.33106193],
       [ 0.32158153,  0.        ,  0.34047794,  0.33923936],
       [ 0.32830723,  0.34047794,  0.        ,  0.33913717],
       [ 0.33106193,  0.33923936,  0.33913717,  0.        ]])

关于python - 将对角矩阵提高到负幂 1/2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28824225/

相关文章:

python - 找到水平线穿过相应 Y 轴值的 X 轴数据点

c++ - C/C++ 中简单快速的矩阵 vector 乘法

python - scrapy:禁用表单请求的过滤是否有意义?

python - 如何使用相关系数矩阵进行聚类?

python - 使用 scikit-learn 计算项目描述之间的余弦相似度

jquery - 如何以 JSON 形式返回 Sqlalchemy 结果?

python - Scipy 的 sign() 不能保证有效吗?

python - 我可以在所有情况下使用 idxmax() 代替 argmax() 吗?

matlab - MATLAB 中的 ode 求解器中的质量矩阵是什么?

matlab - 如何解决 MATLAB "Matrix dimensions must agree"错误?