2013-04-23 75 views
4

我想對基於體素的球體對象進行測量,以numpy數組表示。由於採樣,這些球體被表示爲一組立方體(因爲它們在數組中被採樣)。我想通過這個網格限制來模擬引入的錯誤。有沒有什麼辦法在網格中繪製3D球體來運行我的模擬? (所以基本上,單位長度爲1的球體將是陣列中的一個點)在3D numpy網格中繪製/採樣球體

或者是否有另一種計算採樣引入的誤差的方法?

在2-d,這似乎是容易... Sampling in 2D

回答

5

最直接的方法是創建一個邊界框陣列,所述距離保持在每個點處的球的中心:

>>> radius = 3 
>>> r2 = np.arange(-radius, radius+1)**2 
>>> dist2 = r2[:, None, None] + r2[:, None] + r2 
>>> volume = np.sum(dist2 <= radius**2) 
>>> volume 
123 

二維情況下更容易想象:

>>> dist2 = r2[:, None] + r2 
>>> (dist2 <= radius**2).astype(np.int) 
array([[0, 0, 0, 1, 0, 0, 0], 
     [0, 1, 1, 1, 1, 1, 0], 
     [0, 1, 1, 1, 1, 1, 0], 
     [1, 1, 1, 1, 1, 1, 1], 
     [0, 1, 1, 1, 1, 1, 0], 
     [0, 1, 1, 1, 1, 1, 0], 
     [0, 0, 0, 1, 0, 0, 0]]) 
>>> np.sum(dist2 <= radius**2) 
29 
+0

非常感謝。這個作品真棒!你是否也有一個想法,如何獲得添加下一個「立方體」的半徑「步驟」? – Dschoni 2013-04-23 14:52:27