python - NumPy 数组每列中负元素的总和

标签 python arrays numpy sum

你知道如何对 NumPy 数组的每一列中的所有负元素求和吗? 例如

>>> d
array([[ 1,  2,  3],
       [-1, -1,  9],
       [ 7, -6,  4]])

我需要获取 [-1,-7,0]。有这样做的功能吗?

最佳答案

可以建议的方法很少,如下所列 -

((d<0)*d).sum(0)
np.where(d<0,d,0).sum(0)
np.einsum('ij,ij->j',d<0,d)
((d - np.abs(d)).sum(0))/2

示例逐步运行并解释所有这些方法 -

1) 输入数组:

In [3]: d
Out[3]: 
array([[ 1,  2,  3],
       [-1, -1,  9],
       [ 7, -6,  4]])

2) 负面元素掩码:

In [4]: d<0
Out[4]: 
array([[False, False, False],
       [ True,  True, False],
       [False,  True, False]], dtype=bool)

3) 使用逐元素乘法从输入数组中获取屏蔽的负元素:

In [5]: (d<0)*d
Out[5]: 
array([[ 0,  0,  0],
       [-1, -1,  0],
       [ 0, -6,  0]])

4) 最后,沿 axis=0 求和以沿每一列求和:

In [6]: ((d<0)*d).sum(axis=0) # Or simply ((d<0)*d).sum(0)
Out[6]: array([-1, -7,  0])

方法#2:3) 使用 np.where 获取步骤 (3) 的结果:

In [7]: np.where(d<0,d,0)
Out[7]: 
array([[ 0,  0,  0],
       [-1, -1,  0],
       [ 0, -6,  0]])

方法#3:3,4) 在掩码和数组之间执行逐元素乘法并获得总和,使用 np.einsum 一步完成 -

In [8]: np.einsum('ij,ij->j',d<0,d)
Out[8]: array([-1, -7,  0])

方法#4:获取输入数组的绝对值并从数组本身中减去,得到双倍的负元素和被抵消的正值:

In [9]: d - np.abs(d)
Out[9]: 
array([[  0,   0,   0],
       [ -2,  -2,   0],
       [  0, -12,   0]])

对每一列求和并除以 2 以获得所需的输出:

In [10]: (d - np.abs(d)).sum(0)
Out[10]: array([ -2, -14,   0])

In [11]: ((d - np.abs(d)).sum(0))/2
Out[11]: array([-1, -7,  0])

关于python - NumPy 数组每列中负元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42316380/

相关文章:

python - 在 Python 中绘制聚类图

python - 如果满足条件,则替换 Numpy 元素

python - 根据二维数组中尺寸不匹配的最接近值定位 numpy 索引

python - 输入特定值时在列表中定位字典

python - Jupyter Lab 还不支持 Match-Case 吗?

arrays - 按频率排序

numpy - 神经网络权重以线性单位爆炸

python - 在 Numpy 数组中每行保留最大 N 个值

python - datetime.datetime.ctime() 函数返回固定宽度的字符串吗?

c - 指针和数组 : pointer constant