我有两个numpy数组,users
和dat
。对于users
中的每个用户,我需要找到与dat
中的用户相关的数据,并计算唯一值的数量。我需要处理一个案例,其中len(users)=200000
和len(dat)=2800000
。目前我没有利用dat
被排序这一事实,这使得该方法非常慢。我该怎么做?你知道吗
dat
中的值'other'仅表示结构化数组中也将存在其他值。你知道吗
import numpy as np
users = np.array([111, 222, 333])
info = np.zeros(len(users))
dt = [('id', np.int32), ('group', np.int16), ('other', np.float)]
dat = np.array([(111, 1, 0.0), (111, 3, 0.0), (111, 2, 0.0), (111, 1, 0.0),
(222, 1, 0.0), (222, 1, 0.0), (222, 4, 0.0),
(333, 2, 0.0), (333, 1, 0.0), (333, 2, 0.0)],
dtype=dt)
for i, u in enumerate(users):
u_dat = dat[np.in1d(dat['id'], u)]
uniq = set(u_dat['group'])
info[i] = int(len(uniq))
print info
如果您想从numpy的矢量化中获益,那么如果您可以在手之前从
dat
中删除所有重复项,这将非常有帮助。然后,您可以通过对searchsorted
的两次调用找到值的第一次和最后一次出现:只有在
dat
中搜索大量条目时,这才是有利的。如果它是一个较小的分数,您仍然可以使用对searchsorted
的两个调用来确定要调用unique
的片:相关问题 更多 >
编程相关推荐