Python中如何对numpy数组每行的正元素求和?
解决numpy数组每行正元素求和问题
你的代码当前输出的是每行正元素的个数,而非它们的和——因为np.sum(A[i]>0)是对布尔数组(正元素为True,对应数值1)求和,本质是计数。要得到正元素的和,需要先提取每行的正元素再求和,或者用numpy的向量化操作高效处理。
方法1:修改原循环代码
直接在循环里提取当前行的正元素后求和:
import numpy as np A=np.array([[0,-2,3],[1,0,6],[7,8,0]]) B1=[] for i in range(len(A)): # 筛选出当前行的正元素,再计算总和 positive_elements = A[i][A[i] > 0] B = np.sum(positive_elements) B1.append(B) print(B1)
输出:
[3, 7, 15]
方法2:numpy向量化操作(更高效)
利用numpy的广播和按轴求和功能,避免循环,适合处理大规模数组:
方式A:使用np.where替换非正元素为0后求和
import numpy as np A=np.array([[0,-2,3],[1,0,6],[7,8,0]]) # 将非正元素替换为0,然后沿行(axis=1)求和 B = np.where(A > 0, A, 0).sum(axis=1) print(B.tolist())
方式B:用掩码与原数组相乘后求和
import numpy as np A=np.array([[0,-2,3],[1,0,6],[7,8,0]]) # 布尔掩码与原数组相乘,非正元素会被置为0,再沿行求和 B = (A * (A > 0)).sum(axis=1) print(B.tolist())
两种方式的输出均为:
[3, 7, 15]
内容的提问来源于stack exchange,提问作者isaacmodi123
相关产品推荐
相关产品推荐

