4
我想對基於體素的球體對象進行測量,以numpy數組表示。由於採樣,這些球體被表示爲一組立方體(因爲它們在數組中被採樣)。我想通過這個網格限制來模擬引入的錯誤。有沒有什麼辦法在網格中繪製3D球體來運行我的模擬? (所以基本上,單位長度爲1的球體將是陣列中的一個點)在3D numpy網格中繪製/採樣球體
或者是否有另一種計算採樣引入的誤差的方法?
在2-d,這似乎是容易...
我想對基於體素的球體對象進行測量,以numpy數組表示。由於採樣,這些球體被表示爲一組立方體(因爲它們在數組中被採樣)。我想通過這個網格限制來模擬引入的錯誤。有沒有什麼辦法在網格中繪製3D球體來運行我的模擬? (所以基本上,單位長度爲1的球體將是陣列中的一個點)在3D numpy網格中繪製/採樣球體
或者是否有另一種計算採樣引入的誤差的方法?
在2-d,這似乎是容易...
最直接的方法是創建一個邊界框陣列,所述距離保持在每個點處的球的中心:
>>> 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
非常感謝。這個作品真棒!你是否也有一個想法,如何獲得添加下一個「立方體」的半徑「步驟」? – Dschoni 2013-04-23 14:52:27