Numpy非常自然地进行元素操作。但是,在编写函数时,我常常想要一个元素的位置,如:
def neighbor_count(arr, row, col):
hood = arr[row-1:row+1, col-1, col+1]
return np.sum(hood)-arr[row,col]
我可以创建一个嵌套的for循环:
for (i, row) in enumerate(arr[1:-1]):
for (j, col) in enumerate (row[1:-1]):
c = neighbor_count(arr, i+1, j+1)
但这感觉就像放弃并回到我将如何在c ++中工作。
任何聪明的Pythonic解决方案?
答案 0 :(得分:2)
您希望numpy.ndenumerate
与ndarray
类似,但for (r, c), i in np.ndenumerate(arr):
do_something()
结构。
我无法为您的特定用例提供准确答案,因为您并不完全清楚如何组合结果值,但基本理念是这样。
ndenumerate
请注意,itertools
会返回一个迭代器,因此您习惯使用的所有return
功能都应该使用它。