Dan*_*l.V 1 python numpy matrix
我试图使用numpy在python中实现这个公式
如上图所示,X是numpy矩阵,每个xi是n维向量,C也是numpy矩阵,每个Ci也是n维的向量,dist(Ci,xi)是这两个向量之间的欧氏距离.我在python中实现了一个代码:
value = 0
for i in range(X.shape[0]):
min_value = math.inf
#this for loop iterate k times
for j in range(C.shape[0]):
distance = (np.dot(X[i] - C[j],
X[i] - C[j])) ** .5
min_value = min(min_value, distance)
value += min_value
fitnessValue = value
Run Code Online (Sandbox Code Playgroud)
但是我的代码性能不够好我正在寻找更快,有没有更快的方法来计算python中的公式,任何想法都会感激不尽.
通常,在python中应尽可能避免运行重要次数的循环.
这里存在一个scipy函数,scipy.spatial.distance.cdist(C, X)
它计算C和X之间的成对距离矩阵.也就是说,如果你调用distance_matrix = scipy.spatial.distance.cdist(C, X)
,你有distance_matrix [i,j] = dist(C_i,X_j).
然后,对于每个j,您想要计算所有i的dist(C_i,X_j)的最小值.你不需要循环来计算这个!numpy.minimum
如果传递轴参数,该函数会为您执行此操作.
最后,通过调用numpy.sum
函数来完成所有这些最小值的总和.
这使代码更具可读性和更快:
import scipy.spatial.distance
import numpy as np
def your_function(C, X):
distance_matrix = scipy.spatial.distance.cdist(C, X)
minimum = np.min(distance_matrix, axis=0)
return np.sum(minimum)
Run Code Online (Sandbox Code Playgroud)
返回与您的函数相同的结果:)希望这会有所帮助!
归档时间: |
|
查看次数: |
427 次 |
最近记录: |