Skip to main content
 首页 » 编程设计

python之检查矩阵是否在 python 中对角占优势

2025年05月04日15kerrycode

我知道我的代码是错误的,因为 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 

请注意,该代码利用广播来促进用相应的对角系数减去行总和。