MATLAB的元胞字符串数组(cell array of strings)

在 2013-05-22 发布于 大学相关 下以来已有92,136人读过本文 | 0条评论 发表评论

今天为了在MATLAB中绘制主成分分析得到的载荷矩阵和得分矩阵的biplot图,但MATLAB提供的biplot函数在绘制图像时,只能在结果图形上显示出variables的名称作为标注;而同时绘制的观测量(samples)的分布图,则没有标示出其名字。

我在网上搜索,最后通过修改MATLAB中biplot函数的源文件,终于实现了需要的效果。最后的调用biplot函数的形式如下所示:

biplot(coeff(:,1:2),’scores’,score(:,1:2),’varlabels’,var,’obslabels’,name)

不过,这里的var和name两个用以包含variables和samples的名称的数组需要使用MATLAB中的元胞数组,即cell array。这是个较为罕用的东西,不过概念不难理解,需要用到的朋友可以自行Google。

通常在MATLAB中我们可以直接以这种形式来生成一个元胞数组:

var = {‘MATLAB’ ‘PCA’ ‘PLS’ ‘ANN’ ‘SVM’};

注意,大括号中间相邻的两个单引号之间有空格;或者

var = {‘MATLAB’,’PCA’,’PLS’,’ANN’,’SVM’};

对于这种直接可以用文字来赋值的小型元胞数组,我们可以使用如上所示的形式。但如果我们需要一个包含数百个元素的元胞数组,而其中每一个元素都是数字编号,比如形如{‘1’ ‘2’ ‘3’…}这样的元胞数组,那么,我们如何来实现呢?

最开始我想到的是这样去做:

var = cellstr(num2str(1:size(score,1)));

但是这样得到的结果,是把数组1:size(score,1)作为一个整体得到一个只有一个元素的元胞数组,这唯一的一个元素是形如’123456…’的形式,而这显然不符合我们的要求。

不过很显然,加个循环,我们就得到了我们想要的结果了:

var = [];
for i = 1:size(score,1)
var = [var, cellstr(num2str(i))];
end

发表评论

您的昵称 *

您的邮箱 *

您的网站