如何查找 numpy 数组中每个元素出现的次数?

Kon*_*glo 3 python numpy

给定一个整数数组,我想获得一个相同大小的数组,其中每个值都是原始数组中相应元素出现的次数。

例如给定以下数组:

a = np.array([1, 1, 4, 10, 5, 3, 5, 5, 8, 9])
Run Code Online (Sandbox Code Playgroud)

这应该是结果:

array([2, 2, 1, 1, 3, 1, 3, 3, 1, 1])
Run Code Online (Sandbox Code Playgroud)

尽管通过collections.Counter或内置实现此目的很简单list.count(),但我正在寻找一种更高效的方法来处理大型列表。

Ch3*_*teR 6

您可以使用np.unique并使用参数return_inversereturn_counts。使用return_inverse索引return_counts来获得所需的结果。

return_inverse bool,可选 如果为 True,还返回可用于重建 ar 的唯一数组的索引(对于指定轴,如果提供)。

return_counts bool, 可选 如果为 True,还返回每个唯一项出现在 ar 中的次数。

_, idx, c = np.unique(a, return_inverse=True, return_counts=True)
c[idx]
# array([2, 2, 1, 1, 3, 1, 3, 3, 1, 1])
Run Code Online (Sandbox Code Playgroud)