您的位置:首页 > 编程语言 > MATLAB

关于matlab中的kmeans和reshape函数

2016-06-22 14:15 316 查看
matlab中自带k均值聚类函数kmeans,但使用不当可能导致一些问题,下面总结一下使用这两个函数的时候需要注意的事情。

比如说先随便造一个矩阵sample如下图:



然后对其施行kmeans聚类算法,Idx=kmeans(sample,2)该命令将聚类标号存储在Idx中,当然有时候这句话会报错如下图:



这并没有关系,看提示就知道是在迭代中没能形成簇,这时候重新多运行几次应该就可以了,这时候你看一看Idx到底存的是什么呢?



可以发现Idx是存了5行的标号,也就是说,kmeans对矩阵进行聚类的时候是按照行为单位进行聚类的,一个行向量是一个“点”,所以在图像分割中如果你直接想用reshape来显示不同类对应的图像,如以下命令就会报错了:



原因就在于原始图像是m*n的公有m*n个元素,而reshape函数要求重新塑形之后的矩阵元素要和塑形之前一样多,而你的Idx里是以行为单位的对应的只有m个元素,因此才导致上面红色的错误,为了避免这个问题,你可以在使用kmeans之前先把原矩阵reshape成一个列向量,即



这时候colsample实际上就是一个列向量了,这时候再施行kmeans算法如下图:



再看看newIdx里是什么东东?如下图:



可以发现是所有元素对应的类标号了,所以这时候如果你想看看不同类对应的图像是什么样子就可以使用reshape命令再imshow一下了,如下图:


此时就一切正常没有任何问题了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: