я должен обрабатывать множество массивов, они содержат 512x256 пикселей, подобные данные, однако большинство элементов являются 0
, поэтому я хочу, чтобы сохранить только ненулевые значения, то есть:Python: массив процесс быстрее
import numpy as np
import time
xlist=[]
ylist=[]
zlist=[]
millis = time.time()*1000
ar = np.zeros((512,256),dtype=np.uint16)
for x in range(0,512):
for y in range(0,256):
if (0<ar[x][y]<1000):
xlist.append(x)
ylist.append(y)
zlist.append(ar[x][y])
print time.time()*1000-millis
это занимает около 750 мс на моем компьютере. Есть ли способ сделать это быстрее? Я должен обработать десятки тысяч этих пиксельных массивов.
Похоже, вы имеете дело с разреженными матрицами. Scipy дает вам некоторые типы классов на выбор: http://docs.scipy.org/doc/scipy/reference/sparse.html – heltonbiker
В общем, если вы можете избежать написания циклов при работе с массивами numpy, вы можете получить гораздо более высокую производительность , В качестве побочного примечания, если это python 2.x, просто изменение 'range' на' xrange' может привести к небольшому увеличению производительности. – SethMMorton