簡體   English   中英

3D numpy 數組中的兩個非零元素是否“連接”?

[英]Are two non-zero elements in a 3D numpy array “connected”?

將 3D 空間視為 3D 空間的 3D numpy 數組,如果存在從 A 到 B 的每個相鄰元素的路徑,則兩個數組索引 A 和 B 是“連接的”,其中 Path[i] 是數組索引的列表Path[i+1] 是 (1) 輸入數組中非零元素的索引和 (2) “下一個”,np.max(np.abs(Path[i] - Path[i+1] )) <= 1。

給定一個初始索引 A,我想生成列表 A_Connected,它是所有“連接”到 A 的數組索引的列表。

我的慢方法是:

def find_connected_list(array, index, connected_list):
   connected_list.append(index)

   for x in range(index[0]-1, index[0]+2):
      for y in range(index[1]-1, index[1]+2):
         for z in range(index[2]-1, index[2]+2):
            if x>= 0 and x < array.shape[0] and y >= 0 and y < array.shape[1] and z >= 0 and z < array.shape[2] and array[x,y,z] > 0 and not [x,y,z] in connected_list:
               connected_list = find_connected_list(array, [x,y,z], connected_list)

   return connected_list

你需要從一個完全不同的角度來看待這個問題。 這是一個需要轉換矩陣的圖形問題。

  • 對於數組的每個元素,您應該確定其直接連接的鄰居

  • 結果應存儲在 2d NxN 數組中,其中 N 是 3d 數組中的元素總數,這是轉換矩陣 T

  • 然后,您的出發點是長度為 N 的向量 V,其中 N-1 個零和一個 1

  • 計算 T^k V 並增加 T 以找到距離 V 為 k 步的所有連接點

這只是一個指南,您將在此處找到詳細信息。

Python編碼不是很困難。 您可以使用 T 與對角線中的 1 對稱的事實來加快該過程。

希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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