添加(row,col)作为elementwise numpy函数的参数?

时间:2017-08-22 01:20:30

标签: python numpy

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解决方案?

1 个答案:

答案 0 :(得分:2)

您希望numpy.ndenumeratendarray类似,但for (r, c), i in np.ndenumerate(arr): do_something() 结构。

我无法为您的特定用例提供准确答案,因为您并不完全清楚如何组合结果值,但基本理念是这样。

ndenumerate

请注意,itertools会返回一个迭代器,因此您习惯使用的所有return功能都应该使用它。