2024-04-19 21:24:18 发布
网友
可以删除for循环并使用numpy操作来处理它。与您的代码相同,没有for循环和索引,速度快约60倍:
def ver_2(xCoord, yCoord, zCoord, xSpacing, ySpacing, zSpacing): Grid = numpy.empty([len(xCoord), 8, 4]) Grid[:, 0, 0] = xCoord Grid[:, 0, 1] = yCoord Grid[:, 0, 2] = zCoord Grid[:, 0, 3] = 0 # vX = floorPartial(xCoord, xSpacing) vY = floorPartial(yCoord, ySpacing) vZ = floorPartial(zCoord, zSpacing) # d1 = EucDistSq(xCoord, yCoord, zCoord, vX, vY, vZ) d2 = EucDistSq(xCoord, yCoord, zCoord, vX+xSpacing, vY, vZ) d3 = EucDistSq(xCoord, yCoord, zCoord, vX-xSpacing, vY, vZ) d4 = EucDistSq(xCoord, yCoord, zCoord, vX, vY+ySpacing, vZ) d5 = EucDistSq(xCoord, yCoord, zCoord, vX, vY-ySpacing, vZ) d6 = EucDistSq(xCoord, yCoord, zCoord, vX, vY, vZ+zSpacing) d7 = EucDistSq(xCoord, yCoord, zCoord, vX, vY, vZ-zSpacing) # dt = numpy.sum([d1, d2, d3, d4, d5, d6, d7], axis=0) # VoxelX,VoxelY,VoxelZ,intensity Grid[:, 1] = numpy.stack((vX, vY, vZ, d1/dt), axis=-1) Grid[:, 2] = numpy.stack((vX+xSpacing, vY, vZ, d2/dt), axis=-1) Grid[:, 3] = numpy.stack((vX-xSpacing, vY, vZ, d3/dt), axis=-1) Grid[:, 4] = numpy.stack((vX, vY+ySpacing, vZ, d4/dt), axis=-1) Grid[:, 5] = numpy.stack((vX, vY-ySpacing, vZ, d5/dt), axis=-1) Grid[:, 6] = numpy.stack((vX, vY, vZ+zSpacing, d6/dt), axis=-1) Grid[:, 7] = numpy.stack((vX, vY, vZ-zSpacing, d7/dt), axis=-1) return Grid
我想更多的优化是可能的,有更多的面向矩阵的计算,但我没有准确地掌握代码要做什么:-/可能在计算距离之前设置网格的[:,1-7,0-2]值,而仅仅使用网格值进行距离计算可以减少一些时间,因为省略了一些不需要的分配。你知道吗
可以删除for循环并使用numpy操作来处理它。与您的代码相同,没有for循环和索引,速度快约60倍:
我想更多的优化是可能的,有更多的面向矩阵的计算,但我没有准确地掌握代码要做什么:-/可能在计算距离之前设置网格的[:,1-7,0-2]值,而仅仅使用网格值进行距离计算可以减少一些时间,因为省略了一些不需要的分配。你知道吗
相关问题 更多 >
编程相关推荐