如何读取MATLAB的CELL类型数据中的值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何读取MATLAB的CELL类型数据中的值?相关的知识,希望对你有一定的参考价值。
参考技术A 可以直接用坐标索引读取,即:\\x0d\\x0a例如,A是一个元胞数组\\x0d\\x0a那么Ai,j(m,n)表示:\\x0d\\x0a元胞第i行j列矩阵的第m行第n列\\x0d\\x0a\\x0d\\x0a调整内容:添加和删除与普通矩阵方法一致\\x0d\\x0a相关函数:celldisp:显示所有的内容\\x0d\\x0acell:创建空的元胞数组 \\x0d\\x0acellplot:利用图形方式显示内容\\x0d\\x0acell2mat:将数组转变成为普通的矩阵 \\x0d\\x0amat2cell:将数值矩阵转变成为cell数组\\x0d\\x0anum2cell:将数值数组转变成为cell数组\\x0d\\x0acell2struct:将数组转变成为结构\\x0d\\x0astruct2cell:将结构转变为cell数组\\x0d\\x0aiscell:判断输入是否为cell数组\\x0d\\x0acellfun:为cell数组的每个cell执行指定的函数 fun可以是特殊函数或者句柄MATLAB的cell(元胞数组,又名元组)是个好东西---海纳百川的容器
cell(元胞数组,又名元组)最大的特点是其中的每个元胞都可以包含任意类型的数据,不仅数据类型是任意的,大小也是任意的。它就像一个海纳百川的容器。
这个是真好,因为有很多时候,我们事先并不知道我们要读取的数据的类型和长度,特别是长度,真得是很多情况下并不知道呢。
比如我们批量读取一批文件,每个文件都有文件名,我们要用一个二维字符串数组把名字存下来,但因为每个文件的文件名长度不一样,所以我们无法事先定义好二维字符串数组每个元素的长度。
再比如我们要批量读取一组图片,每个图片都有不同的宽高,我们也无法事先预先定义存储每一张图片的矩阵尺寸。
这个时候我们使用cell就可非常方便的解决以上两个问题了。
来看cell是如何解决上面的第一个问题的,即用一个变量存储多个文件的文件名。
示例代码如下:
[FileName,PathName,Indx]=uigetfile('*.*','All Files (*.*)',...
'Open Video File','MultiSelect','on');
上面这段代码运行后,将弹出文件选取对话框,我们选取多个文件,那么程序将返回被选到的多个文件的文件名,并存储在变量FileName中,我们选择三个文件,如下图所示:
可见, 程序运处后,FileName为一个cell类型的数组,里面存储了三个不长度的字符串。
再来看cell是如何解决上面的第二个问题的,即用一个变量存储多幅不同尺寸的图像。
文件夹中有四张图片,如下图所示:
它们的尺寸分别如下:
可见,四幅图的尺寸都不一样,这就导致我们没法预先定义一个确定大小的四维数组去存储以上四张图像。
此时,我们便可以用cell实现我们的这个需求,即用一个变量存储多幅不同尺寸的图像。
代码如下:
N=4;
img_group=cell(1,N);
for i=1:N
imName=strcat(num2str(i),'.jpg');
img_groupi=imread(imName);
end
for i=1:N
imgName = strcat(num2str(i),'张图');
imgName = strcat('第',imgName);
figure,imshow(img_groupi);title(imgName);
end
运行结果如下:
从以上运行结果我们可以看到,虽然四张图的尺寸不一样,但四张图被正确存储到了cell数组img_group中,并且可被正确引用。
而且,从上面这个示例我们还知道了如何访问cell数组的元素了,即用花括号(大括号)加索引,比如下面这条语句。
img_groupi=imread(imName);
另外,有时我们需要存储不同类型的元素,也可用cell。
比如下面的代码:
N=5;
cell_group=cell(1,N);
k1=int8(-5);
k2=uint16(88);
k3=single(567.3);
k4=double(999.3563);
k5='i love you';
cell_group1=k1;
cell_group2=k2;
cell_group3=k3;
cell_group4=k4;
cell_group5=k5;
运行结果如下图所示:
以上是关于如何读取MATLAB的CELL类型数据中的值?的主要内容,如果未能解决你的问题,请参考以下文章