我知道我的代码是错误的,因为 np.sum(abs(X),axis=1)) 也对对角线值求和,因此我的代码将始终返回“NOT diagonally dominant”。我试过输入 '-np.diag(X)' 但我收到一条错误消息。提前致谢!
import numpy as np
A=np.array([[ 40., 7., 5.],
[ 5., 90., 7.],
[20., 7., 50.]])
def dd(X):
Sum_values_in_given_row = np.sum(abs(X),axis=1)
if np.all(((abs(np.diag(X)))) >= np.sum(abs(X),axis=1)):
print 'matrix is diagonally dominant'
else:
print 'NOT diagonally dominant'
return
dd(A)
请您参考如下方法:
要确定一个矩阵是否对角占优,您必须检查不包括对角系数的行系数之和是否大于对角系数。显然,您将绝对值作为测试的一部分。您没有这样做,而是包括了对角线系数。正如您提到的,您应该用对角系数减去每个元素的总和以确保检查正确,但由于某种原因您没有将其放入代码中:
def dd(X):
D = np.diag(np.abs(X)) # Find diagonal coefficients
S = np.sum(np.abs(X), axis=1) - D # Find row sum without diagonal
if np.all(D > S):
print 'matrix is diagonally dominant'
else:
print 'NOT diagonally dominant'
return
请注意,该代码利用广播来促进用相应的对角系数减去行总和。
