1
我想计算从一组N个三维点到一组三维M中心的距离并将结果存储在一个NxM矩阵中(其中第i列是从所有点到中心的距离ⅰ)聚类计算的有效距离
实施例:
data = np.random.rand(100,3) # 100 toy 3D points
centers = np.random.rand(20,3) # 20 toy 3D points
为了计算所有点,我们可以使用一个单一的中心之间的距离“广播”,所以我们避免发生循环虽然所有点:
i = 0 # first center
np.sqrt(np.sum(np.power(data - centers[i,:], 2),1)) # Euclidean distance
现在,我们可以把这个代码在一个循环,遍历所有中心:
distances = np.zeros(data.shape[0], centers.shape[0])
for i in range(centers.shape[0]):
distances[:,i] = np.sqrt(np.sum(np.power(data - centers[i,:], 2),1))
然而,这显然是可以并行的和改进的操作。
我想知道是否有更好的方法做到这一点(也许一些多维广播或一些图书馆)。
这是一个非常常见的聚类和分类问题,你想从数据到一组类的距离,所以我认为这应该是一个有效的实现。
这样做的最好方法是什么?
有关此主题的选项很多http://stackoverflow.com/questions/43367001/how-to-calculate-euclidean-distance-between-pair-of-rows-of-a-numpy-array/43368088#43368088 – NaN
你知道吗scikit-learn:http://scikit-learn.org/?你会发现很多分类方法 – Dadep
更具体,你可能想要使用paiwise距离函数(http://stackoverflow.com/a/43367358/5786475)或instanciate k-means方法(http:// scikit-learn.org/stable/modules/clustering.html#k-means)与您的中心并请求距离。 – pixelou