我有以下代码。在 Python 中这需要很长时间。必须有一种方法可以将此计算转换为广播......
def euclidean_square(a,b):
squares = np.zeros((a.shape[0],b.shape[0]))
for i in range(squares.shape[0]):
for j in range(squares.shape[1]):
diff = a[i,:] - b[j,:]
sqr = diff**2.0
squares[i,j] = np.sum(sqr)
return squares
您可以使用np.einsum http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.einsum.html计算 a 的差异后broadcasted way http://docs.scipy.org/doc/numpy-1.10.1/user/basics.broadcasting.html,就像这样——
ab = a[:,None,:] - b
out = np.einsum('ijk,ijk->ij',ab,ab)
Or use scipy's cdist http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.spatial.distance.cdist.html其可选的度量参数设置为'sqeuclidean'
为我们提供解决问题所需的平方欧氏距离,如下所示 -
from scipy.spatial.distance import cdist
out = cdist(a,b,'sqeuclidean')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)