有没有办法使用曼哈顿距离 select Numpy 二维数组的子集?

Is there a way to select a subset of a Numpy 2D array using the Manhattan distance?

例如,我有一个用零填充的 Numpy 二维数组(7 行,7 列):

my_array = numpy.zeros((7, 7))

然后为了论证说我想 select 中间的元素并将其值设置为 1:

my_array[3,3] = 1

现在假设我的曼哈顿距离为 3,我如何将我的数组子集化为仅 select 小于或等于曼哈顿距离(从中间元素开始)的元素和将这些元素设置为 1?最终结果应该是:

我可以遍历二维数组中的每个元素,但不想这样做,因为这太昂贵了,尤其是当我的矩阵非常大且曼哈顿距离非常小时(例如 70x70 矩阵与曼哈顿距离 10).

我会用 meshgrid 创建一个大小为 2,n,n 的辅助矩阵来整理索引,然后减去所需的索引中心,对减去的索引的绝对值求和并进行阈值比较。这里有一些例子

import numpy as np
import matplotlib.pyplot as plt #to draw result



n=70 #size of matrix
distance = 10 #distance
centerCoord = [35,35]

#here i create a mesh matrix of indices
xarr   = np.arange(n)
idxMat = np.meshgrid(xarr,xarr) #create a matrix [2,n,n] 

pt = np.array(centerCoord).reshape(-1,1,1) #point of size [2,1,1]


elems =  np.abs(idxMat-pt).sum(axis=0) <= distance

plt.matshow(elems)

结果:

如果您需要索引,那么调用 np.where 将 return 您 2 个数组 (xindexList,yindexList)