Рассчитать среднее значение списка списков - PullRequest
0 голосов
/ 10 мая 2018

У меня есть список содержит 70000 векторов (подсписок размером 50 int)

я хочу перезапустить среднее из этого списка

я пробую np.mean ( list , axis = 0), но это так медленно. это займет так много времени без какого-либо результата.

любой другой способ рассчитать это среднее?

Пример моего списка:

lis =[[1, 19, 19, 4, 5, 19, 10, 5, 21, 14, 5, 19, 4, 21, 20, 18, 15, 9, 19, 9, 5, 13, 5, 13, 9, 12, 12, 5, 14, 1, 9, 18, 5, 19, 5, 3, 20, 9, 15, 14, 8, 1, 25, 8, 1, 19, 19, 1, 14, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 4, 5, 12, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 16, 18, 9, 14, 3, 5, 13, 12, 25, 8, 9, 3, 8, 1, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 4, 5, 12, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 1, 9, 14, 3, 8, 9, 6, 1, 7, 1, 18, 15, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 12, 25, 3, 5, 5, 3, 15, 12, 12, 5, 7, 9, 1, 12, 1, 2, 15, 21, 5, 19, 19, 5, 4, 9, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 1, 2, 4, 18, 1, 8, 13, 1, 14, 5, 2, 14, 15, 21, 26, 9, 4, 1, 14, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 19, 1, 1, 4, 2, 14, 15, 21, 1, 2, 9, 23, 1, 11, 11, 1, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 1, 2, 4, 5, 12, 10, 1, 12, 9, 12, 2, 5, 14, 8, 1, 9, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[5, 3, 15, 12, 5, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 19, 1, 11, 9, 14, 1, 2, 9, 14, 20, 5, 12, 8, 15, 21, 3, 5, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 4, 5, 19, 15, 21, 20, 9, 5, 14, 4, 5, 12, 5, 3, 15, 12, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 5, 12, 13, 1, 19, 19, 9, 18, 1, 1, 12, 11, 8, 1, 4, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 19, 19, 19, 15, 21, 20, 9, 5, 14, 5, 3, 15, 12, 5, 4, 5, 18, 5, 21, 19, 19, 9, 20, 5, 5, 3, 15, 12, 5, 12, 1, 12, 12, 1, 25, 1, 3, 15, 21, 20, 13, 12, 25, 18, 1, 3, 8, 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],...]
print np.mean(lis,axis=0)

1 Ответ

0 голосов
/ 10 мая 2018

Это может быть быстрее, используя itertools.izip , но в вашем случае (если вы не приведете его к массиву пустотелых) понимание лучше всего работает:

[(sum(x)*1.0)/len(x) for x in itertools.izip(*lis)]

*1.0 связано с делением Python 2.x.

lis = [[random.randint(1,50) for j in range(50)] for i in range(1400)]
%timeit np.mean(lis, axis=0)
100 loops, best of 3: 3.67 ms per loop

%timeit [(sum(x)*1.0)/len(x) for x in itertools.izip(*lis)]
100 loops, best of 3: 1.07 ms per loop
%timeit [(sum(x)*1.0)/len(x) for x in lis] #NOTE: equivalent to np.mean(lis,axis=1)
100 loops, best of 3: 660 µs per loop

lisnp = np.array(lis) 

%timeit np.mean(lisnp, axis=0)
100 loops, best of 3: 132 µs per loop

lisnp = np.array(lis, dtype=np.float64)

%timeit np.mean(lisnp, axis=0)
100 loops, best of 3: 67.3 µs per loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...