我想在我的 numpy 矩阵中找到一个点的范围 1(或完全对角线)内的点列表:
例如说我的矩阵m
是:
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 1 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
我想获得一个元组列表或代表9个点的所有坐标的东西,X如下:
[[0 0 0 0 0]
[0 X X X 0]
[0 X X X 0]
[0 X X X 0]
[0 0 0 0 0]]
这是另一个目标点位于边缘的示例:
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 1]
[0 0 0 0 0]
[0 0 0 0 0]]
在这种情况下,目标点的距离 1 内只有 6 个点:
[[0 0 0 0 0]
[0 0 0 X X]
[0 0 0 X X]
[0 0 0 X X]
[0 0 0 0 0]]
编辑:
假设我知道目标点的坐标,使用 David Herrings 关于切比雪夫距离的回答/评论是我尝试解决上面的示例 2:
from scipy.spatial import distance
point = [2, 4]
valid_points = []
for x in range(5):
for y in range(5):
if(distance.chebyshev(point, [x,y]) <= 1):
valid_points.append([x,y])
print(valid_points) # [[1, 3], [1, 4], [2, 3], [2, 4], [3, 3], [3, 4]]
对于更大的数组,这似乎有点低效,因为我只需要检查一小组单元,而不是整个矩阵。