簡體   English   中英

在二維 Numpy 數組中查找最近的元素

[英]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 列。

  • 如果兩個包含 1 的單元格距離相同,我不在乎我得到哪一個。
  • 邊界不相互連接,即單元格第 7 列第 9 列最接近的 1 不是第 1 行第 7 列第 0 列

當然這是我的問題的簡化示例,我的實際 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM