我有一个numpy像素数组(0或255),使用.where拉出大于0的元组。我现在想使用这些元组将1添加到单独的2D numpy数组中。是仅使用如下所示的for循环的最佳方法,还是有一种更好的类似于numpy的方法?

changedtuples = np.where(imageasarray > 0)

#If there's too much movement change nothing.
if frame_size[0]*frame_size[1]/2 < changedtuples[0].size:
    print "No change- too much movement."
elif changedtuples[0].size == 0:
    print "No movement detected."
else:
    for x in xrange(changedtuples[0].size):
        movearray[changedtuples[1][x],changedtuples[0][x]] = movearray[changedtuples[1][x],changedtuples[0][x]]+1

最佳答案

movearray[imageasarray.T > 0] += 1


where是多余的。您可以使用布尔掩码(如imageasarray.T > 0产生的掩码)索引数组,以选择掩码为True的所有数组单元。然后+=将1加到所有这些单元格。最后,T是转置的,因为当您增加movearray的单元格时,好像要切换索引。

关于python - 在Python中修改(元组定义)Numpy数组部分的更快/更好的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25102013/

10-11 06:31