You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:30:01