我有一个代码,该代码计算到与已分配的体素最接近的体素(未分配)。那就是我有一个体素数组,很少有体素已经分配了标量(1,2,3,4 .... etc)值,而很少有体素是空的(假设值是“ 0”)。下面的代码查找到最接近未分配体素的分配体素,并为该体素分配相同的标量。因此,标量为“ 0”的体素将根据最近的体素分配一个值(1或2或3,...)。下面的代码可以工作,但是会花费太多时间。有替代方法吗?还是对如何进一步改进有任何反馈?
“”“#self.voxels是3D numpy数组”“”
def fill_empty_voxel1(self,argx, argy, argz):
""" where # argx, argy, argz are the voxel location where the voxel is zero"""
argx1, argy1, argz1 = np.where(self.voxels!=0) # find the non zero voxels
a = np.column_stack((argx1, argy1, argz1))
b = np.column_stack((argx, argy, argz))
tree = cKDTree(a, leafsize=a.shape[0]+1)
distances, ndx = tree.query(b, k=1, distance_upper_bound= self.mean) # self.mean is a mean radius search value
argx2, argy2, argz2 = a[ndx][:][:,0],a[ndx][:][:,1],a[ndx][:][:,2]
self.voxels[argx,argy,argz] = self.voxels[argx2,argy2,argz2] # update the voxel array
Run Code Online (Sandbox Code Playgroud)
python parallel-processing performance kdtree nearest-neighbor