gpt4 book ai didi

python - 成对平方差的高效 Numpy 计算

转载 作者:太空狗 更新时间:2023-10-30 02:03:24 27 4
gpt4 key购买 nike

下面的代码完全符合我的要求,即计算向量元素之间差值的成对平方和(示例中长度为 3),我有一个很长的系列(这里限制为五个)。所需的结果显示在底部。但由于两个原因,实现感觉很糟糕:

1) 需要添加一个幻象维度,将形状从(5, 3) 更改为(5,1,3) 以避免广播问题,以及

2) 显式“for”循环的明显必要性,我确信这就是为什么在我更大的数据集(一百万个长度为 2904 的向量)上执行需要花费数小时的原因。

是否有更有效和/或 Pythonic 的方法来实现相同的结果?

a = np.array([[ 4,  2,  3], [-1, -5,  4], [ 2,  1,  4], [-5, -1,  4], [6, -3,  3]])
a = a.reshape((5,1,3))

m = a.shape[0]
n = a.shape[2]
d = np.zeros((n,n))
for i in range(m):
c = a[i,:] - np.transpose(a[i,:])
c = c**2
d += c

print d

[[ 0. 118. 120.]
[ 118. 0. 152.]
[ 120. 152. 0.]]

最佳答案

如果您不介意对scipy 的依赖,您可以使用scipy.spatial.distance 中的函数图书馆:

In [17]: from scipy.spatial.distance import pdist, squareform

In [18]: a = np.array([[ 4, 2, 3], [-1, -5, 4], [ 2, 1, 4], [-5, -1, 4], [6, -3, 3]])

In [19]: d = pdist(a.T, metric='sqeuclidean')

In [20]: d
Out[20]: array([ 118., 120., 152.])

In [21]: squareform(d)
Out[21]:
array([[ 0., 118., 120.],
[ 118., 0., 152.],
[ 120., 152., 0.]])

关于python - 成对平方差的高效 Numpy 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com