我有一个需要处理的大型numpy数组,以便在满足条件的情况下将每个元素更改为1或0(稍后将用作像素遮罩)。数组中大约有800万个元素,而我当前的方法对于简化流程花费的时间太长:
for (y,x), value in numpy.ndenumerate(mask_data): if mask_data[y,x]<3: #Good Pixel mask_data[y,x]=1 elif mask_data[y,x]>3: #Bad Pixel mask_data[y,x]=0
是否有一个numpy函数可以加快速度?
>>> import numpy as np >>> a = np.random.randint(0, 5, size=(5, 4)) >>> a array([[4, 2, 1, 1], [3, 0, 1, 2], [2, 0, 1, 1], [4, 0, 2, 3], [0, 0, 0, 2]]) >>> b = a < 3 >>> b array([[False, True, True, True], [False, True, True, True], [ True, True, True, True], [False, True, True, False], [ True, True, True, True]], dtype=bool) >>> >>> c = b.astype(int) >>> c array([[0, 1, 1, 1], [0, 1, 1, 1], [1, 1, 1, 1], [0, 1, 1, 0], [1, 1, 1, 1]])
您可以使用以下方法来缩短它:
>>> c = (a < 3).astype(int)