高效获取唯一元素+计数 - 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]
我可以验证u
和v
是一样的,使用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
我正在寻找这个问题
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]
我可以验证u
和v
是一样的,使用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