4

我想对球形物体进行基于体素的测量,以 numpy 数组表示。由于采样,这些球体被表示为一组立方体(因为它们是在数组中采样的)。我想通过这个网格限制来模拟引入的错误。有没有办法在一个 numpy 网格中绘制一个 3D 球体来运行我的模拟?(所以基本上,单位长度为 1 的球体将是数组中的一个点)

还是有另一种计算采样引入的误差的方法?

在二维中,这似乎很容易......2D 采样

4

1 回答 1

6

最直接的方法是创建一个边界框数组,在每个点保存到球体中心的距离:

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

2D 案例更容易可视化:

>>> 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
于 2013-04-23T13:45:26.457 回答