[英]Normalize a symmetric matrix by fixing unique diagonal value
我有一個對稱矩陣a
,其對角線元素可以不同。
>>> import numpy as np
>>> a = np.array([[3, 7, 6], [7, 2, 5], [6, 5, 1]])
>>> a
array([[3, 7, 6],
[7, 2, 5],
[6, 5, 1]])
我想對這個矩陣進行歸一化,使所有對角線元素都為 0,如下所示:
array([[0, x1, x2],
[x1, 0, x3],
[x2, x3, 0]])
我該怎么做(如果可能,在 Python 中)? 任何幫助將不勝感激,謝謝。
如果你想讓所有對角線元素都為 0,只需使用一個簡單的for-loop 。
for i in range(len(matrix)):
matrix[i][i] = 0
您可以使用以下命令: np.fill_diagonal(a, 0)
( https://numpy.org/doc/stable/reference/generated/numpy.fill_diagonal.html )
按照您的說明:如果我很了解您想要做什么,那么您可以區分兩種情況。
X = np.linalg.solve(a, A)
例如,如果 a 不可逆但 A 可逆,則沒有解(否則 X*A^-1 將提供 a 的逆)。 一般來說,解存在的必要條件是rk(A) <= rk(a)(根據秩定理)。
在另一種情況下,有無窮多個解
a = array([[0, 0, 0],
[0, 2, 0],
[0, 0, 1]])
A = array([[0., 0., 0.],
[0., 0., 1.],
[0., 1., 0.]])
自從
array([[0. , 0. , 0. ], array([[1., 1., 1.],
X = [0. , 0. , 0.5], + lbda * [0., 0., 0.],
[0. , 1. , 0. ]]) [0., 0., 0.]])
為np.dot(a,X) = A
的每個實際值求解np.dot(a,X) = A
如果您處於第二種情況(無限多的解決方案),則可以使用
X = np.linalg.lstsq(a,A)[0]
即使在 a 不可逆的情況下也提供了解決方案(如果 a 可逆,則返回與 np.linalg.solve 相同的結果)。 如果不存在解,此命令將返回一個矩陣,使得 np.dot(a,X) 與 A“盡可能接近”。您可以通過添加像assert np.max(np.abs(np.dot(a,X) - A)) < 1E-5
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.