我想计算常规 3D 网格上每对节点之间的距离。网格可能很大,所以我想优化计算(CPU 特权)。
经过多次测试,我放弃了仅对python2方便的'scitools'模块,并使用了numpy.meshgrid()和scipy.spatial.distance.pdist()的组合。例如,对于 20x20x20 网格:
distances = scipy.spatial.distance.pdist(np.transpose(np.array(np.meshgrid(range(-10,10,1),range(-10,10,1),range(-10,10,1)))).reshape([20**3,3]))
优化了吗?
第一个'也许这是要走的路......':我看到meshgrid中有一个'sparse'选项,所以我很乐意使用
np.meshgrid(range(-10,10,1),range(-10,10,1),range(-10,10,1),sparse=True)
而不是
np.meshgrid(range(-10,10,1),range(-10,10,1),range(-10,10,1))
事实上,我什至可以将稀疏形状保留在内存中,因为它在代码的后面会很方便。但是我没有找到令人满意的语法来将 pdist() 与稀疏网格网格结合起来。