Python中删除矩阵每行除对角线外正元素报错问题求助
问题解决:Numpy矩阵非对角线正元素置0
错误原因
你调用np.delete时只传入了一个参数,但np.delete必须传入两个必填参数:要操作的数组,以及要删除的对象(索引或切片),因此触发TypeError。更关键的是代码逻辑完全偏离需求:np.where(A>0, A, 0).sum(axis=1)会把每行求和压缩成一维数组,根本无法保留原矩阵结构,自然得不到目标结果。
正确解法
方法一:布尔掩码定位修改
直接通过布尔掩码筛选出非对角线且元素为正的位置,将其置0:
import numpy as np A = np.array([[1,-2,3],[1,2,6],[-7,8,-2]]) # 创建对角线为True的布尔矩阵 diag_mask = np.eye(A.shape[0], dtype=bool) # 筛选非对角线且元素>0的位置,置为0 A[~diag_mask & (A > 0)] = 0 print(A)
输出:
array([[ 1, -2, 0], [ 0, 2, 0], [-7, 0, -2]])
方法二:先置0再还原对角线
先把所有正元素置0,再将原对角线元素填充回去:
import numpy as np A = np.array([[1,-2,3],[1,2,6],[-7,8,-2]]) # 保存原对角线元素 original_diag = np.diag(A) # 所有正元素置0 A[A > 0] = 0 # 填充原对角线元素 np.fill_diagonal(A, original_diag) print(A)
输出和方法一一致。
内容的提问来源于stack exchange,提问作者bekarhunmain
相关产品推荐
相关产品推荐

