MATLAB的元胞字符串数组(cell array of strings)
关键词:array of strings、matlab元胞转为字符串、matlab 元胞转字符串
今天为了在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