我有两个二维咬合数组(仅 1 和 0)。我在做
array2 = numpy.where( array1, 0, array2 )
当array1
匹配条件时,它会更改array2
的值。但是,如果我不想更改满足条件的单元格的值,而是更改其邻居单元格的值,该怎么办?我的意思是,我想更改为 array1
评估为 True
的 i,j
子数组array2[i-1:i+2,j-1:j+2]
。
是否可以避免循环,这在大数组上真的很慢?
最佳答案
参见scipy.ndimage.filters.generic_filter
因此,在您的示例中,footprint
参数将为 (3, 3)
,即 3 x 3 的邻域和 函数
code> 如果条件为 true 或 false,则参数应返回;
类似于:
func = lambda xs: np.any(xs) # or whatever appropriate
mask = generic_filter(array1, func, footprint=(3, 3))
array2[mask] = 0
关于涉及单元邻居的两个相同形状的 numpy 数组之间的 Python 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484620/