Python 是否将(行、列)作为参数添加到elementwise numpy函数?
Numpy非常自然地进行元素操作。但是,在编写函数时,我通常还想知道元素的位置,例如:Python 是否将(行、列)作为参数添加到elementwise numpy函数?,python,numpy,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]):
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解决方案吗?你想要的,它的工作原理类似于enumerate
但不适用于ndarray
结构
我不能为您的特定用例提供一个确切的答案,因为还不完全清楚您是如何组合结果值的,但基本思想是这样的
for (r, c), i in np.ndenumerate(arr):
do_something()
请注意,
ndenumerate
返回一个迭代器,因此您使用的所有itertools
功能都应该使用该迭代器。也许您应该添加一个带有预期结果的小示例。例如,np.random.seed(0);a=np.random.randint(0,5,25)。重塑([5,5])
,然后使用该数组来说明您试图在包含预期结果的情况下实现的目标。是否希望:col-1:col+1
?hood
是否应该是一组(3,3)元素围绕(包括)arr[row,col]
?而[1:-1]
的目的是避免跑完终点?有一些移动窗口或图像卷积方法更快。请显示完整的代码、足够的输入和预期的输出。你的问题太零碎,无法给出可靠的有用答案。