高效获取唯一元素+计数 - NumPy / Python

Efficiently get unique elements + count - NumPy / Python

我正在寻找这个问题 的扩展,它还可以 return 每个唯一元素的计数(即它在数组中出现的次数)。

import numpy as np
max_a = 20_000
a = np.random.randint(max_a, size=10_000).astype(np.int32)

# Using np.unique
u,counts = np.unique(a,return_counts=True)

# Faster alternative suggested in the post above
q = np.zeros(max_a, dtype=int)
q[a] = 1
v = np.nonzero(q)[0]

我可以验证uv是一样的,使用q的更快的方法肯定更快。但是,我还想要由 np.unique() 调用 return 编辑的 counts。有没有办法修改这里的例子来获得这些?

注意 a 的元素将始终为 np.int32 类型,因此它们可用于索引。

如果 a 的类型为 uint,您可以使用 np.bincount,它提供了一种快速获取计数的方法。如果你确实有负数,也许你可以添加一个偏移量来使所有正数?

例如:

counts = np.bincount(a) # includes 0-counts
unique = np.flatnonzero(counts)
counts = counts[unique] # remove 0-counts