为什么这个numpy数组操作这么慢?

Sti*_*fel 0 python arrays numpy matrix

我是一个python初学者,我试图平均两个NumPy 2D阵列的形状(1024,1024).像这样做很快:

newImage = (image1 + image2) / 2
Run Code Online (Sandbox Code Playgroud)

但是现在图像有一个"掩码",如果设置为零,则会使某些元素无效.这意味着如果其中一个元素为零,则结果元素也应为零.我的琐碎解决方案是:

newImage = numpy.zeros( (1024,1024) , dtype=numpy.int16 )

for y in xrange(newImage.shape[0]):
   for x in xrange(newImage.shape[1]):
      val1 = image1[y][x]  
      val2 = image2[y][x]                            
      if val1!=0 and val2!=0:               
         newImage[y][x] = (val1 + val2) / 2
Run Code Online (Sandbox Code Playgroud)

但这真的很慢.我没有时间,但它似乎慢了100倍.

我也尝试使用lambda运算符和"map",但这不会返回NumPy数组.

eum*_*iro 8

试试这个:

newImage = numpy.where(np.logical_and(image1, image2), (image1 + image2) / 2, 0)
Run Code Online (Sandbox Code Playgroud)

如果没有image1image2等于零,取其平均值,否则为零.