做机器学习实验K-means时,我想把每个聚类(cluster)当成每个元素放入np.array中,而每个聚类是一个矩阵,矩阵的行数是该类样本点的个数,矩阵的列数是每一个样本点的特征数(即维度)。
我希望得到的clusters大概是这样的:
于是我在写程序时先初始化一个三维数组clusters,第一维代表聚类的个数,第二类代表每一类的样本点个数,第三类代表每个点的特征个数。
最初,我把每一类的中心点都加入到每个类cluster中。所以初始时,三维数组的第二维等于1。
然后遍历平面上的所有点,把这个点的所属类别加入到相应的cluster中,用vstack方法拼接在每个cluster后面。
(注:该实验中我使用的点的特征数为2,便于可视化)
可是python报错:
然后我用另一个py文件测试了一下这个有趣的现象:
通过以上现象我们可以看出:
- np.array()支持数组元素类型不同!
- 如果np.array()初始化时每个元素类型相同(在我的程序里表现为所有元素都是同型矩阵),那么就不能把一个不同维度的矩阵重新复制给该列表中的元素。也就是说,此时要想更新列表元素,只能用同类型的元素去更新。
- 如果如果np.array()初始化时每个元素类型并非相同,那么可以随意更改列表中的元素。