Numpy - 如何根据其他列中的二进制值计算列中的值?
Posted
技术标签:
【中文标题】Numpy - 如何根据其他列中的二进制值计算列中的值?【英文标题】:Numpy - how to count values in column based on binary values in other columns? 【发布时间】:2022-01-10 02:18:44 【问题描述】:我有一个只有二进制值的 2d numpy 数组,我正在尝试根据具有同一行的其他列的二进制组合来计算列中 1 的数量。
假设我有:
[[0,0,0,0],
[1,0,1,0],
[0,0,0,1],
[1,0,0,0],
[0,1,0,0],
[1,0,1,0]]
并且我希望能够计算第一列中 1 的数量,其中同一行中的其他列具有值 [0, 1, 0]
。我需要我的代码返回2
。第 1 行和第 5 行就是这种情况。
我尝试使用掩码执行此操作,但它没有返回我正在寻找的结果:
test = numpy.asarray(
[[0,0,0,0],
[1,0,1,0],
[0,0,0,1],
[1,0,0,0],
[0,1,0,0],
[1,0,1,0]])
mask = test[:,[1, 2, 3]] == [0,1,0]
mask
返回
array([[ True, False, True],
[ True, True, True],
[ True, False, False],
[ True, False, True],
[False, False, True],
[ True, True, True]])
假设掩蔽是正确的方法,有什么建议可以在我得到这个掩蔽后下一步做什么?
【问题讨论】:
【参考方案1】:您希望每行中的所有三个元素都匹配[0,1,0]
,因此您的mask
应该是:
mask = (test[:,1:] == [0,1,0]).all(axis=1)
out = test[mask,0].sum()
输出:
2
如果您想在对应于相同配置的第一列中计数零,则在上面的mask
中添加第一列中的 0 过滤器:
out2 = test[mask&(test[:,0]==0),0].shape[0]
【讨论】:
如果第 1 到第 3 列与模式匹配,该问题要求计算第 0 列中 1 的数量。所以你的答案需要以arr[ :, 0][ mask].sum()
而不是len( test[mask])
结尾。在显示的示例中,您给出相同的结果,但可能与其他数据不同。
@TlsChris 你是对的。我错过了那部分。编辑以反映这一点。谢谢。
感谢您的回复。但是如果我想计算第一列中对应于相同二进制配置的零,我还能使用all
参数以上是关于Numpy - 如何根据其他列中的二进制值计算列中的值?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 numpy 数组存储在 Pandas 数据框的列中?