如何解决在二维 Numpy 数组中查找最近的元素
我有一个二维 numpy 数组,如:
[[0 0 0 0 0 0 0 0 1 1]
[0 0 0 1 0 1 0 0 0 1]
[1 0 1 0 0 0 1 0 0 1]
[1 0 0 0 0 0 0 0 1 0]
[0 1 0 0 0 1 0 1 1 0]
[0 0 0 1 1 0 0 0 0 0]
[0 1 1 1 1 1 0 0 0 0]
[1 0 0 0 1 0 1 0 0 0]
[0 0 0 0 0 0 0 1 0 0]
[0 1 0 0 0 0 0 0 0 0]]
我们可以把它想象成一张从上面看的地图。 我将选择一个随机单元格,假设第 3 行第 4 列(从 0 开始计数)。如果单元格包含 1,则没有问题。如果单元格是 0,我需要找到最近的 1 的索引。
这里,第 3 行第 4 列是 0,我想要一种方法来找到最近的 1,即第 4 行第 5 列。
- 如果两个包含 1 的单元格的距离相同,我不在乎得到的是哪一个。
- 边界不相互连接,即单元格第 7 列第 9 列的最近 1 不是第 1 行第 7 列
当然,这是我问题的一个简化示例,我实际的 np 数组不包含零和一,而是包含无和浮点数
解决方法
这是一个简单的“寻路”问题。准备一个空的坐标队列并将起始位置推入队列。然后,从队列中弹出第一个元素并检查位置,如果为 1,则返回坐标,否则将所有邻居推入队列并重复。
ADJACENT = [(0,1),(1,0),(0,-1),(-1,0)]
def find(data: np.array,start: tuple):
queue = deque()
deque.append(start)
while queue:
pos = queue.popleft()
if data[pos[0],pos[1]]:
return position
else:
for dxy in ADJACENT:
(x,y) = (pos[0] + dxy[0],pos[1],dxy[1])
if x >= 0 and x < data.size[0] and y >= and y < data.size[1]:
queue.append((x,y))
return None
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。