Numpy - 如何根据其他列中的二进制值计算列中的值?

Numpy - how to count values in column based on binary values in other columns?

我有一个只有二进制值的 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]。我需要我的代码 return 2。第 1 行和第 5 行就是这种情况。

我试着用面具来做这个,但它不是 return我正在寻找的结果:

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

哪个return

array([[ True, False,  True],
       [ True,  True,  True],
       [ True, False, False],
       [ True, False,  True],
       [False, False,  True],
       [ True,  True,  True]])

假设戴口罩是正确的方法,请问我拿到这个口罩后下一步该怎么做?

您希望每一行中的所有三个元素都匹配 [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]