Python:有没有一种方法可以逐行计算多维numpy ndarray的元素出现次数?

时间:2020-10-19 11:42:15

标签: python numpy numpy-ndarray

我有一个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循环来实现我想要的行为?

1 个答案:

答案 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)]