У меня есть два массива numpy, users
и dat
. Для каждого пользователя в users
Мне нужно найти данные, относящиеся к пользователю в dat
и подсчитать количество уникальных значений. Мне нужно обработать случай, где len(users)=200000
и len(dat)=2800000
. В настоящее время я не использую тот факт, что dat
отсортирован, что делает метод очень медленным. Как мне это сделать?Подсчет количества уникальных значений в подмножестве отсортированной матрицы
Значение 'other' в dat
просто показывает, что другие значения будут присутствовать и в структурированном массиве.
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
В C, вам петлю и увеличивать свой счетчик, когда текущее значение = предыдущее значение!. Это, вероятно, не полезно здесь, поскольку элементы цикла в python обычно не так, как вы пишете быстрый код numpy. –