关于matlab中的kmeans和reshape函数

来源:互联网 发布:淘宝卖家电话隐藏 编辑:程序博客网 时间:2024/06/02 04:44

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一下了,如下图:

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


0 0
原创粉丝点击