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矩阵的列中的所有值是不是相同?

如何根据bigquery中另一列中的重复值计算一列

如何将 numpy 数组存储在 Pandas 数据框的列中?

如何将 numpy 数组存储在 Pandas 数据框的列中?

如何根据其他列中的条件从某个 ID 中选择所有值?

QTableview:根据其他列中的值显示特定列中的数据