给定一个球壳体积(即从同一中心减去较小球的一个球),我需要计算该体积内所有整数点的位置。
通过计算在外径内部的所有整数点(通过所有整数直径的笛卡尔积)并随后删除内径内的点,我可以轻松地实现这一点。
然而,在某些情况下,半径可能相当大,因此生成外径内所有点可能比我想要的更加耗时。因此,我希望尽可能消除计算内径内的点所浪费的处理时间(或至少最小化必要的数量)。以下是一些当前的代码,但半径可能会更大。
有什么想法吗?
通过计算在外径内部的所有整数点(通过所有整数直径的笛卡尔积)并随后删除内径内的点,我可以轻松地实现这一点。
然而,在某些情况下,半径可能相当大,因此生成外径内所有点可能比我想要的更加耗时。因此,我希望尽可能消除计算内径内的点所浪费的处理时间(或至少最小化必要的数量)。以下是一些当前的代码,但半径可能会更大。
import numpy as n
import numpy.linalg as la
def cartesian_product(*arrays):
la = len(arrays)
dtype = n.result_type(*arrays)
arr = n.empty([len(a) for a in arrays] + [la], dtype=dtype)
for i, a in enumerate(n.ix_(*arrays)):
arr[..., i] = a
return arr.reshape(-1, la)
def points_in_shell(inner_radius, outer_radius):
cutoff = int(n.ceil(outer_radius))
int_range = n.arange(-cutoff, cutoff+1)
pos_initial = cartesian_product(int_range, int_range, int_range)
pos_norm = la.norm(pos_initial, axis=1)
valid_idx = n.where((pos_norm >= inner_radius) & (pos_norm <= outer_radius))
pos_final = pos_initial[valid_idx]
return pos_final
vals = points_in_shell(89.634, 95.254)
有什么想法吗?