实现numpy bincount以更改最常用值的一半?

实现numpy bincount以更改最常用值的一半?,numpy,Numpy,我正在使用numpy实现KMeans算法 我正在制作一个名为“距离”的numpy数组,如下所示: [[ 5. 1. 1. 1. 2. 1. 3. 1. 1. 1.] [ 5. 4. 4. 5. 7. 10. 3. 2. 1. 0.] [ 3. 1. 1. 1. 2. 2. 3. 1. 1. 1.] [ 6. 8. 8. 1. 3. 4. 3. 7. 1. 1.] [ 4. 1. 1. 3. 2. 1. 3.

我正在使用numpy实现KMeans算法

我正在制作一个名为“距离”的numpy数组,如下所示:

[[ 5.  1.  1.  1.  2.  1.  3.  1.  1.  1.]
 [ 5.  4.  4.  5.  7. 10.  3.  2.  1.  0.]
 [ 3.  1.  1.  1.  2.  2.  3.  1.  1.  1.]
 [ 6.  8.  8.  1.  3.  4.  3.  7.  1.  1.]
 [ 4.  1.  1.  3.  2.  1.  3.  1.  1.  1.]
 [ 8. 10. 10.  8.  7. 10.  9.  7.  1.  0.]
 [ 1.  1.  1.  1.  2. 10.  3.  1.  1.  0.]
 [ 2.  1.  2.  1.  2.  1.  3.  1.  1.  1.]
 [ 2.  1.  1.  1.  2.  1.  1.  1.  5.  1.]
 [ 4.  2.  1.  1.  2.  1.  2.  1.  1.  1.]]
其中,前9列是数据点,最后一列是为初始化的随机质心指定数据点的簇

在这个数组中,我希望看到这些值,最后一列中的0,1,2。在上面给定的数组中,我们只能在最后一列中看到0,1。在本例中,我打算将最常用值的一半从最后一列更改为2

k=3
for c in range(k):
    if c in distances[:, -1]:
    else:
        x = np.bincount(distances[:,-1]).argmax()
        distances[:len(distances[distances[:,-1]==x])/2,-1][distances[:,-1] == x] = c
然而,这是行不通的。有人能帮我解决这个问题吗


错误->索引器错误:布尔索引与维度0上的索引数组不匹配;维度为0,但相应的布尔维度为10

我认为这可能会对您有所帮助

If
distance
是包含数组的变量

x=np.unique(distance[:,-1]).argmax()
pos=np.argwhere(distance[:,-1]==x).flatten()
for i in range(int(len(pos)/2)):
    distance[i,-1]=2

我希望这有帮助

上一个问题的答案是否回答了这个问题?没有,尽管它帮助我计算了一个新的质心数组。其中一些行是0,因为在我的distanes矩阵中,我看不到一些集群值。我已将问题更改为特定问题。你现在能帮我吗?