Jos*_*del 29
我想看看scipy.spatial.distance.cdist:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html
import numpy as np
import scipy
a = np.random.normal(size=(10,3))
b = np.random.normal(size=(1,3))
dist = scipy.spatial.distance.cdist(a,b) # pick the appropriate distance metric 
dist 对于默认的远程度量,相当于:
np.sqrt(np.sum((a-b)**2,axis=1))  
虽然cdist对于大型阵列来说效率更高(在我的机器上,因为你的尺寸问题,cdist速度提高了约35倍).
小智 6
我会使用欧几里德距离的sklearn实现.优点是使用矩阵乘法使用更有效的表达式:
dist(x, y) = sqrt(dot(x, x) - 2 * dot(x, y) + dot(y, y)
一个简单的脚本如下所示:
import numpy as np
x = np.random.rand(1000, 3)
y = np.random.rand(1000, 3)
dist = np.sqrt(np.dot(x, x)) - (dot(x, y) + dot(x, y)) + dot(y, y)
sklearn文档中很好地描述了这种方法的优点:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.euclidean_distances.html#sklearn.metrics.pairwise.euclidean_distances
我正在使用这种方法来处理大型数据矩阵(10000,10000),并进行一些小修改,例如使用np.einsum函数.
| 归档时间: | 
 | 
| 查看次数: | 32583 次 | 
| 最近记录: |