在3D numpy网格中绘制/采样球体

Dsc*_*oni 4 geometry drawing numpy sampling

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

或者是否有其他方法来计算采样引入的误差?

二维似乎很容易......二维采样

Jai*_*ime 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)