Python列表使用问题:res1 =center[label.flatten()]或者XM = MI[bestLabel==0]两种写法都代表什么意思啊?

Python基础不牢,有些语法都不知道是什么,此处贴出源代码,是一个划分大米和小米的Kmeans算法示例。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

#创建要进行分类的数据,小米和大米各60个数据,小米直径为0,50,大米为200,250
xiaoMI = np.random.randint(0,50,60)
daMI = np.random.randint(200,250,60)

#将数据混合,并且reshape为120列
MI = np.hstack((xiaoMI,daMI))
MI = MI.reshape((120,1))
MI = np.float32(MI)

#调用kmeans
#算法迭代的终止标签
criteria = (cv.TERM_CRITERIA_EPS+cv.TERM_CRITERIA_MAX_ITER,10,1.0)#表示精度达到1.0,或者迭代次数达到10时,停止迭代。
flags = cv.KMEANS_RANDOM_CENTERS#表示随机选取中心点
retval,bestLabel,centers = cv.kmeans(MI,2,None,criteria,10,flags)#函数参数分别为,要进行划分的数据、划分成几份、返回值索引、criteria、使用不同的初始分类值得次数、flags

#打印返回值
print(retval)
print(bestLabel)
print(centers)
# 获取分类结果
XM = MI[bestLabel==0]
DM = MI[bestLabel==1]

#绘制原始数据
plt.plot(XM,'ro')
plt.plot(DM,'bo')

#绘制中心点
plt.plot(centers[0],'rx')
plt.plot(centers[1],'bx')
plt.show()
  • res1 =center[label.flatten()]
    确定”label.flatten()“ 返回类型 和 center 的类型,
    如果”center“ 类型是列表,”label.flatten()“肯定只可能是 int类型,按下标取值,例如 : center[1]。
    如果”center“ 类型是字典,”label.flatten()“ 可能性就很多,但是可以确定是不可变类型,通过 键值对的键取值,例如:center["key"] 或 center.get("key")

  • XM = MI[bestLabel==0]
    基本可以确定 MI 是字典,”bestLabel==0“ 结果是 True 或 False,例如: MI[True]