我有两个1D numpy数组A和B,大小分别为(n,)和(m,),它们对应于一条线上点的x位置。我要计算A中的每个点到B中的每个点之间的距离,然后我需要用这些距离在一个设定的y距离,d,计算出A中每个点的电势
我目前使用的是:
V = numpy.zeros(n)
for i in range(n):
xdist = A[i] - B
r = numpy.sqrt(xdist**2 + d**2)
dV = 1/r
V[i] = numpy.sum(dV)
这是可行的,但对于大型数据集,它可能需要一段时间,所以我想使用一个类似于scipy.spatial.distance公司.cdist,它不适用于1D数组,我不想在数组变得太大时再添加其他维度。在
^{} 效果很好,您只需重新塑造数组的形状(n,1),而不是(n,)。您可以使用
A[:, None]
或A.reshape(-1, 1)
向一维数组A
添加另一个维度,而无需复制底层数据。在例如
要计算代码中显示的}一起使用,如下所示:
^{pr2}$V
,可以将cdist
与{矢量化方法
将}之后的一种矢量化方法是-
A
扩展到{大型阵列的混合方法
现在,对于大型数组,我们可能需要将数据分成块。在
因此,使用
^{pr2}$BSZ
作为块大小,我们将使用一种混合方法,如-运行时测试
方法-
时间安排和验证-
我们可以使用参数块大小
BSZ
-因此,最好的方法似乎是在我的末尾提供一个块大小为
2x
的加速。在编辑:经过仔细观察,我的答案与Divakar的答案几乎相同。不过,在某些地方做一些操作可以节省内存。沿着第二个轴求和比长第一个轴更有效。在
它提供了与代码相同的解决方案。在
相关问题 更多 >
编程相关推荐