我有一个2D值数组,并想计算每一行中元素的出现次数。 bincount
函数仅适用于一维数组,使用python循环遍历每一行将不理想。 unique
函数有一个参数return_counts,但是,它计算整个列,而不是我要查找的每一行的逐元素基础。
为了更清楚地说明这一点:
import numpy as np
a = np.array([[1, 1, 3, 2, 2, 2],
[2, 3, 4, 3, 5, 3]])
print(a)
# [[1, 1, 3, 2, 2, 2],
# [2, 3, 4, 3, 5, 3]]
b, c = np.unique(a, return_counts=True, axis=1) # Count elements in axis 1
print(b)
# [[1 1 2 2 3]
# [2 3 3 5 4]]
print(c)
# [1 1 2 1 1]
unique
代替计数每一行中的元素,而是计算沿我指定的水平轴1的列; [2, 3]
列被计数两次,其他列被计数一次。有什么方法可以使用本地numpy函数而不是python循环来实现我想要的行为?
答案 0 :(得分:0)
我不认为numpy
具有良好的计数器功能。我建议使用collections.Counter()
,但确实会在行上添加for循环。
from collections import Counter
counts = [Counter(a[k, :]) for k in range(a.shape[0])]
可以使用不同的方法访问Counter
对象,例如.most_common()
:
counts[0].most_common()
Out: [(2, 3), (1, 2), (3, 1)]