matlab中cell数组用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中cell数组用法相关的知识,希望对你有一定的参考价值。

参考技术A cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体

1.cell数组的创建

可以直接通过类似于矩阵的直接赋值:a='winter',123,'coming','哈哈';

也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a='winter',123,'coming','哈哈';

2.cell数组的访问

与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。

3.cell数组相关的函数

cell:创建空的元胞数组,预分配内存

celldisp:显示元胞数组所有内容

cellplot:利用图形方式显示内容(因缺思厅!)

cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)

mat2cell:将普通矩阵转化成元胞数组

iscell:判断输入是否为元胞数组

cellfun:为cell数组的每个cell单元执行指定的函数,fun可以是特殊的函数或者句柄

b=[1,2,1];[2,1,1];[1,1,2];

c=cellfun(@(x)(mat2str(x)),b,'un',0)

更一般的例子参见https://cn.mathworks.com/matlabcentral/answers/99632-how-do-i-save-a-cell-array-that-contains-both-strings-and-numbers-to-an-ascii-file-in-matlab

4.cell单元的删除

我们知道矩阵及矩阵的删除可以通过[]实现:

元胞数组操作类似但和其赋值一样有区别,区别就在于和()

a=1,2,3;

a1=[];%并不能删除第一个cell单元,只是变成空值

a(1)=[];%删除第一个单元

a(:)=[];%一次性删除所有cell单元

如果p为一个数,那么h(1)=p,是没有问题的。

如果p为一个向量,那么h(1,:)=p是没有问题的。

如果p是一个矩阵的话,上面的两种赋值方法都是会有错误的。

那么要如何处理呢?

这时就用到了cell数据类型了。cell的每个单元都可以存储任何数据,比如传递函数等。当然,存储矩阵更是没有问题的了。但是用cell数据类型之前,要先初始化。

a=cell(n,m)

那么就把a初始化为一个n行m列的空cell类型数据。

如何赋值呢?

a1,1=rand(5)

那么a的1行1列的单元中存储的就是一个随机的5×5的方阵了。

那么要用第一个单元中的方阵中的某个值呢?

可以如下引用:a1,1(2,3)

就可以了,引用cell单元时要用,再引用矩阵的某个数据就要用()了。

cell单元中的每个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。

matlab 中 bwboundaries 函数 的用法

谁知道matlab中 bwboundaries 的用法,帮下小弟,小弟不胜感激.越详细越好.

参考技术A 格式:B = bwboundaries(BW,conn)(基本格式)
作用:获取二值图中对象的轮廓,和OpenCV中cvFindContours函数功能类似。B是一个P×1的cell数组,P为对象个数,每个cell是Q×2的矩阵,对应于对象轮廓像素的坐标。

help 文档例子
I = imread('rice.png');%读入图像
BW = im2bw(I, graythresh(I));%转换成2进制图像
[B,L] = bwboundaries(BW,'noholes');%寻找边缘,不包括孔
imshow(label2rgb(L, @jet, [.5 .5 .5]))%显示图像
hold on
for k = 1:length(B)
boundary = Bk;
plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
end%整个循环表示的是描边本回答被提问者和网友采纳

以上是关于matlab中cell数组用法的主要内容,如果未能解决你的问题,请参考以下文章

matlab中cell数组问题

matlab的cell语句

MATLAB中cell函数用法

matlab中结构体和cell的区别

MATLAB的cell数组

怎样把Matlab的cell 变为普通的数组