我目前正在python中实现集群算法。由于最终产品将使用数千个阵列元素,我试图尽量减少循环并尽可能地优化它。
我使用scipy的cdist从选定数量的随机簇创建距离的2D数组。所以3个簇会产生一系列距离,比如x
点:
distances = array([[5.5,2.5,7.3],
[1.0,4.6,2.2],
[6.0,2.8,7.1],
[5.3,4.6,1.5],
...........]])
如果每列是一个簇的距离,每一行都是一个点,我希望快速创建一个值为0,1或2的数组(可能解决相同的距离),如下所示:
label = array([1,0,1,2,.......])
除了循环之外的快速解决方案将不胜感激。
答案 0 :(得分:1)
使用
distances.argmin(axis=1)
返回
array([1, 0, 1, 2])
表示您的示例数组。
对于相同的距离,它返回第一次出现的这种元素。