![](/img/trans.png)
[英]Find the nearest nonzero element and corresponding index in a 2d NumPy array
[英]Finding the nearest element in a 2D Numpy array
我有一個二維 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]]
我們可以將其視為從上方看的 map。 我會選擇一個隨機單元格,比如說第 3 行第 4 列(從 0 開始計數)。 如果單元格包含 1,則沒有問題。 如果單元格是 0,我需要找到最接近 1 的索引。
在這里,第 3 行第 4 列是 0,我想要一種方法來找到最接近的 1,即第 4 行第 5 列。
當然這是我的問題的簡化示例,我的實際 np arrays 不包含零和一,而是包含無和浮點數
這是一個簡單的“尋路”問題。 准備一個空的坐標隊列並將起始 position 推入隊列。 然后,從隊列中彈出第一個元素並檢查位置,如果它是 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.