【发布时间】:2021-06-13 01:18:45
【问题描述】:
我有两个数组,它们是 3D 空间中的点列表。这些数组有不同的长度。
np.shape(arr1) == (34709, 3)
np.shape(arr2) == (4835053, 3)
在给定周期性边界条件的情况下,我有一个函数可以计算一个数组中的单个点与另一个数组中的所有点之间的毕达哥拉斯距离:
def pythag_periodic(array, point, dimensions):
delta = np.abs(array - point)
delta = np.where(delta > 0.5 * dimensions, delta - dimensions, delta)
return np.sqrt((delta ** 2).sum(axis=-1))
我正在尝试将此操作应用于两个数组中的所有点。我有一个递归调用这个函数的循环,但速度非常慢。
for i in arr1:
pp.append(pythag_periodic(arr2, i, dimensions))
任何关于如何加快速度的建议将不胜感激。
【问题讨论】:
-
我会看看多处理库 - 特别是 Pool。 docs.python.org/3/library/multiprocessing.html
-
您正在查看大小为
34709 x 4835053的最终矩阵。你确定你有记忆吗? -
几件事情要检查,map reduce,PyCUDA,使用 C/C++ 绑定运行计算密集型部分。
-
您还可以更改计算欧几里德距离的行以使用 np.linalg.norm()
-
您可以将此数据分块并在单独的进程上运行并将结果合并为一个。
标签: python python-3.x numpy multidimensional-array numpy-ndarray