计算数组中的条件事件

时间:2017-05-09 13:24:45

标签: python

我有一个表格的二维数组:np.zeros((m,n))。 我的目标是查看前两列,我想找到第一列中发生最多的元素(所以第一列的模式),但是如果第二列是第二列,我不想计算两次同样的。

5x3示例:

[[1 2 x], [1 2 y], [1 3 z], [5 3 w], [5 6 v], [9 2 x], [9 2 y],]

所需的输出,即出现次数:

[1]: 2
[5]: 2
[9]: 1

所以在某种程度上它是一个计数器函数,但是以第二个数组为条件(第2列)。

我对Python比较陌生,是否有一个可以直接且有效地执行此操作的函数?我需要在非常大的矩阵上运行它,但是找不到这样的函数。

1 个答案:

答案 0 :(得分:2)

这个功能解决了你的问题。

def count_special(arr):
    counter = {}
    for i in np.unique(arr[:,0]):
        sec = arr[arr[:,0]==i,1]
        counter[i] = len(np.unique(sec))
    return counter

,对于您的输入,返回:

arr = np.array([[1,2,0],[1,2,4],[1,3,4],[5,3,1],[5,6,0]])
print(count_special(arr))

- > {1:2,5:2}