Python K-均值,计算我的质心的新位置

Python K-均值,计算我的质心的新位置,python,numpy,k-means,Python,Numpy,K Means,我有一个矩阵XY_C,其中XY_C0和XY_C1表示X,Y表示我的数据点,XY_C2它们所属组的颜色 print(XY_C) #[['-0.9006811702978088' '1.019004351971607' '#890007'] # ['-1.1430169111851105' '-0.13197947932162468' '#890007'] # ['-1.3853526520724133' '0.32841405319566835' '#890007'] # ['-1.5065

我有一个矩阵
XY_C
,其中
XY_C0和XY_C1
表示X,Y表示我的数据点,
XY_C2
它们所属组的颜色

print(XY_C)
#[['-0.9006811702978088' '1.019004351971607' '#890007']
#  ['-1.1430169111851105' '-0.13197947932162468' '#890007']
#  ['-1.3853526520724133' '0.32841405319566835' '#890007']
#  ['-1.5065205225160652' '0.09821728693702184' '#890007']
#  ['-1.0218490407414595' '1.2492011182302534' '#890007']
#  ['-0.537177558966854' '1.939791417006192' '#35893b']
#  ['-1.5065205225160652' '0.7888075857129604' '#890007']
#  ['-1.0218490407414595' '0.7888075857129604' '#890007']
#  ['-1.7488562634033669' '-0.3621762455802712' '#890007']
#  ['-1.1430169111851105' '0.09821728693702184' '#890007']
#  ['-0.537177558966854' '1.4793978844889' '#35893b']
#  ['-1.2641847816287624' '0.7888075857129604' '#890007']
#  ['-1.2641847816287624' '-0.13197947932162468' '#890007']
#  ['-1.870024133847019' '-0.13197947932162468' '#890007']
#  ['-0.05250607719224957' '2.1699881832648384' '#35893b']
#  ['-0.1736739476359004' '3.090775248299425' '#35893b']
#  ['-0.537177558966854' '1.939791417006192' '#35893b']
#  ['-0.9006811702978088' '1.019004351971607' '#890007']
#  ['-0.1736739476359004' '1.7095946507475455' '#35893b']
#  ['-0.9006811702978088' '1.7095946507475455' '#35893b']
#  ['-0.537177558966854' '0.7888075857129604' '#90177d']
#  ['-0.9006811702978088' '1.4793978844889' '#890007']
#  ['-1.5065205225160652' '1.2492011182302534' '#890007']
#  ['-0.9006811702978088' '0.5586108194543139' '#890007']
#  ['-1.2641847816287624' '0.7888075857129604' '#890007']
#  ['-1.0218490407414595' '-0.13197947932162468' '#890007']
#  ['-1.0218490407414595' '0.7888075857129604' '#890007']
#  ['-0.7795132998541568' '1.019004351971607' '#890007']
#  ['-0.7795132998541568' '0.7888075857129604' '#890007']
#  ['-1.3853526520724133' '0.32841405319566835' '#890007']
#  ['-1.2641847816287624' '0.09821728693702184' '#890007']
#  ['-0.537177558966854' '0.7888075857129604' '#90177d']
#  ['-0.7795132998541568' '2.400184949523484' '#35893b']
#  ['-0.4160096885232032' '2.6303817157821316' '#35893b']
#  ['-1.1430169111851105' '0.09821728693702184' '#890007']
#  ['-1.0218490407414595' '0.32841405319566835' '#890007']
#  ['-0.4160096885232032' '1.019004351971607' '#35893b']
#  ['-1.1430169111851105' '1.2492011182302534' '#890007']
#  ['-1.7488562634033669' '-0.13197947932162468' '#890007']
#  ['-0.9006811702978088' '0.7888075857129604' '#890007']
#  ['-1.0218490407414595' '1.019004351971607' '#890007']
#  ['-1.6276883929597161' '-1.7433568431321493' '#890007']
#  ['-1.7488562634033669' '0.32841405319566835' '#890007']
#  ['-1.0218490407414595' '1.019004351971607' '#890007']
#  ['-0.9006811702978088' '1.7095946507475455' '#35893b']
#  ['-1.2641847816287624' '-0.13197947932162468' '#890007']
#  ['-0.9006811702978088' '1.7095946507475455' '#35893b']
#  ['-1.5065205225160652' '0.32841405319566835' '#890007']
#  ['-0.658345429410506' '1.4793978844889' '#35893b']
#  ['-1.0218490407414595' '0.5586108194543139' '#890007']
#  ['1.401508368131566' '0.32841405319566835' '#35893b']
#  ['0.6745011454696588' '0.32841405319566835' '#35893b']
#  ['1.2803404976879151' '0.09821728693702184' '#35893b']
#  ['-0.4160096885232032' '-1.7433568431321493' '#90177d']
#  ['0.7956690159133096' '-0.5923730118389178' '#90177d']
#  ['-0.1736739476359004' '-0.5923730118389178' '#90177d']
#  ['0.5533332750260068' '0.5586108194543139' '#35893b']
#  ['-1.1430169111851105' '-1.513160076873503' '#890007']
#  ['0.9168368863569605' '-0.3621762455802712' '#90177d']
#  ['-0.7795132998541568' '-0.8225697780975633' '#890007']
#  ['-1.0218490407414595' '-2.433947141908088' '#890007']
#  ['0.06866179325140237' '-0.13197947932162468' '#90177d']
#  ['0.18982966369505322' '-1.9735536093907948' '#90177d']
#  ['0.31099753413870407' '-0.3621762455802712' '#90177d']
#  ['-0.29484181807955234' '-0.3621762455802712' '#90177d']
#  ['1.0380047568006125' '0.09821728693702184' '#35893b']
#  ['-0.29484181807955234' '-0.13197947932162468' '#90177d']
#  ['-0.05250607719224957' '-0.8225697780975633' '#90177d']
#  ['0.432165404582356' '-1.9735536093907948' '#90177d']
#  ['-0.29484181807955234' '-1.2829633106148564' '#90177d']
#  ['0.06866179325140237' '0.32841405319566835' '#90177d']
#  ['0.31099753413870407' '-0.5923730118389178' '#90177d']
#  ['0.5533332750260068' '-1.2829633106148564' '#90177d']
#  ['0.31099753413870407' '-0.5923730118389178' '#90177d']
#  ['0.6745011454696588' '-0.3621762455802712' '#90177d']
#  ['0.9168368863569605' '-0.13197947932162468' '#35893b']
#  ['1.1591726272442633' '-0.5923730118389178' '#90177d']
#  ['1.0380047568006125' '-0.13197947932162468' '#35893b']
#  ['0.18982966369505322' '-0.3621762455802712' '#90177d']
#  ['-0.1736739476359004' '-1.0527665443562098' '#90177d']
#  ['-0.4160096885232032' '-1.513160076873503' '#90177d']
#  ['-0.4160096885232032' '-1.513160076873503' '#90177d']
#  ['-0.05250607719224957' '-0.8225697780975633' '#90177d']
#  ['0.18982966369505322' '-0.8225697780975633' '#90177d']
#  ['-0.537177558966854' '-0.13197947932162468' '#90177d']
#  ['0.18982966369505322' '0.7888075857129604' '#35893b']
#  ['1.0380047568006125' '0.09821728693702184' '#35893b']
#  ['0.5533332750260068' '-1.7433568431321493' '#90177d']
#  ['-0.29484181807955234' '-0.13197947932162468' '#90177d']
#  ['-0.4160096885232032' '-1.2829633106148564' '#90177d']
#  ['-0.4160096885232032' '-1.0527665443562098' '#90177d']
#  ['0.31099753413870407' '-0.13197947932162468' '#90177d']
#  ['-0.05250607719224957' '-1.0527665443562098' '#90177d']
#  ['-1.0218490407414595' '-1.7433568431321493' '#890007']
#  ['-0.29484181807955234' '-0.8225697780975633' '#90177d']
#  ['-0.1736739476359004' '-0.13197947932162468' '#90177d']
#  ['-0.1736739476359004' '-0.3621762455802712' '#90177d']
#  ['0.432165404582356' '-0.3621762455802712' '#90177d']
#  ['-0.9006811702978088' '-1.2829633106148564' '#890007']
#  ['-0.1736739476359004' '-0.5923730118389178' '#90177d']
#  ['0.5533332750260068' '0.5586108194543139' '#35893b']
#  ['-0.05250607719224957' '-0.8225697780975633' '#90177d']
#  ['1.522676238575217' '-0.13197947932162468' '#35893b']
#  ['0.5533332750260068' '-0.3621762455802712' '#90177d']
#  ['0.7956690159133096' '-0.13197947932162468' '#90177d']
#  ['2.1285155907934734' '-0.13197947932162468' '#35893b']
#  ['-1.1430169111851105' '-1.2829633106148564' '#890007']
#  ['1.7650119794625196' '-0.3621762455802712' '#35893b']
#  ['1.0380047568006125' '-1.2829633106148564' '#90177d']
#  ['1.643844109018869' '1.2492011182302534' '#35893b']
#  ['0.7956690159133096' '0.32841405319566835' '#35893b']
#  ['0.6745011454696588' '-0.8225697780975633' '#90177d']
#  ['1.1591726272442633' '-0.13197947932162468' '#35893b']
#  ['-0.1736739476359004' '-1.2829633106148564' '#90177d']
#  ['-0.05250607719224957' '-0.5923730118389178' '#90177d']
#  ['0.6745011454696588' '0.32841405319566835' '#35893b']
#  ['0.7956690159133096' '-0.13197947932162468' '#90177d']
#  ['2.2496834612371255' '1.7095946507475455' '#35893b']
#  ['2.2496834612371255' '-1.0527665443562098' '#35893b']
#  ['0.18982966369505322' '-1.9735536093907948' '#90177d']
#  ['1.2803404976879151' '0.32841405319566835' '#35893b']
#  ['-0.29484181807955234' '-0.5923730118389178' '#90177d']
#  ['2.2496834612371255' '-0.5923730118389178' '#35893b']
#  ['0.5533332750260068' '-0.8225697780975633' '#90177d']
#  ['1.0380047568006125' '0.5586108194543139' '#35893b']
#  ['1.643844109018869' '0.32841405319566835' '#35893b']
#  ['0.432165404582356' '-0.5923730118389178' '#90177d']
#  ['0.31099753413870407' '-0.13197947932162468' '#90177d']
#  ['0.6745011454696588' '-0.5923730118389178' '#90177d']
#  ['1.643844109018869' '-0.13197947932162468' '#35893b']
#  ['1.8861798499061717' '-0.5923730118389178' '#35893b']
#  ['2.4920192021244283' '1.7095946507475455' '#35893b']
#  ['0.6745011454696588' '-0.5923730118389178' '#90177d']
#  ['0.5533332750260068' '-0.5923730118389178' '#90177d']
#  ['0.31099753413870407' '-1.0527665443562098' '#90177d']
#  ['2.2496834612371255' '-0.13197947932162468' '#35893b']
#  ['0.5533332750260068' '0.7888075857129604' '#35893b']
#  ['0.6745011454696588' '0.09821728693702184' '#35893b']
#  ['0.18982966369505322' '-0.13197947932162468' '#90177d']
#  ['1.2803404976879151' '0.09821728693702184' '#35893b']
#  ['1.0380047568006125' '0.09821728693702184' '#35893b']
#  ['1.2803404976879151' '0.09821728693702184' '#35893b']
#  ['-0.05250607719224957' '-0.8225697780975633' '#90177d']
#  ['1.1591726272442633' '0.32841405319566835' '#35893b']
#  ['1.0380047568006125' '0.5586108194543139' '#35893b']
#  ['1.0380047568006125' '-0.13197947932162468' '#35893b']
#  ['0.5533332750260068' '-1.2829633106148564' '#90177d']
#  ['0.7956690159133096' '-0.13197947932162468' '#90177d']
#  ['0.432165404582356' '0.7888075857129604' '#35893b']
#  ['0.06866179325140237' '-0.13197947932162468' '#90177d']]
所以我得到了这个

每次执行代码时,我都会将质心定位为一个随机的(X,Y)。这就是它的工作原理

好,现在我需要的是计算它们的新位置,据我所知,这可以通过计算每组颜色的平均值(X,Y)来完成。那我们走吧

  lst = []
  for i in range(k):
    mean_ = XY_C[ XY_C[:, 2] == colors[i]][:, 0:2]
    lst.append(np.mean(mean_.astype('float'), axis=0))

  centr_means = np.column_stack(lst).T

  for c in range(k):
     plt.plot(centr_means[c, 0], centr_means[c, 1], c=colors[c], marker="X", markersize=15)
看看
centr_的意思是什么
就是节约,我会说我成功了

print(centr_means)
# [[-0.78442551 -0.13820101]
#  [ 1.77926702  0.16592222]
#  [ 0.47118557  0.12552877]]
但出于某种奇怪的原因,一旦我画出了我的质心的新位置,我总是会得到像这样奇怪的东西

这几乎毫无意义。。。怎么了


我希望我的问题很清楚,我的英语很差,谢谢。

你能解释一下为什么这不是你需要的吗。你期望得到什么样的结果?在图中可以看到质心非常扭曲,我不确定这是否是它们的平均值,因为从技术上讲,它们应该在质量中更分组,而不是扭曲,对吗?
print(centr_means)
# [[-0.78442551 -0.13820101]
#  [ 1.77926702  0.16592222]
#  [ 0.47118557  0.12552877]]