我需要在numpy中计算,其中$ x_i $和$ x_j $是矩阵$ X $中的行。现在我正在使用循环,这非常慢。是否有任何numpy本机函数允许这样的计算,如einsum:
n=X.shape[0]
Y=np.zeros((n,n))
for i in range(n):
x=(X-X[i])**2
x=np.sum(x, axis=1)
Y[i]=x
return Y
顺便说一下,我对einsum非常困惑。它的引入是否有任何好的材料。关于numpy的手册页对我来说不是很清楚。
答案 0 :(得分:2)
方法#1
您可以使用broadcasting
作为vectorized
方法 -
import numpy as np
Y = np.sum((X - X[:,None,:])**2,2)
对于相对较小的输入数组,这应该是有效的。
方法#2
好像你正在进行欧氏距离计算并获得平方距离。所以,你可以这样使用distance.cdist
-
import numpy as np
from scipy.spatial import distance
Y = distance.cdist(X, X, 'sqeuclidean')
对于大型输入数组,这应该是有效的。