【发布时间】:2013-08-15 14:18:17
【问题描述】:
我必须处理很多数组,它们包含 512x256 像素状数据,但是大多数条目是0,所以我只想保存非零值,即:
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 为您提供了一些类类型供您选择:docs.scipy.org/doc/scipy/reference/sparse.html
-
一般来说,如果你可以避免在处理 numpy 数组时编写循环,你可以获得更快的性能。附带说明一下,如果这是 python 2.x,只需将
range更改为xrange即可获得微小的性能提升。
标签: python arrays performance numpy