• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MATLAB数据类型 — 元胞(cell)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前言

在编写MATLAB程序时,我们可以不指定变量的数据类型。这使得MATALB编程很接近演算纸式的科学计算。当然,这也造成使用者往往忽略了MATLAB中的数据类型。了解MATLAB中的数据类型,可以更好的帮助我们进行MATALB编程。

在MATLAB编程中,常用的基本数据类型有:

(1) logical(逻辑);(2) char(字符);(3) numeric(数值);(4) cell(元胞);(5) struct(结构体);(6) function handle(函数句柄)。

对于有C语言基础的使用者来说,前面3种基本数据类型是很熟悉的,后面3种基本数据类型则需要进一步的了解。本文章将讲述cell(元胞)类型,该类型在复杂编程中常被使用。

正文

元胞是一个很独特的数据类型。与其他数据类型不同,它可以存储任意类型的数据,例如逻辑型、字符型和数值型等,甚至是元胞型。

那么,你可能会联想到元胞数组可以同时存储不同类型和大小的数据。答案当然是肯定,这就是元胞数组最大的特点。这里你可能会有疑问,数组的每一个元素不应该是同一类型的嘛,这是不是违反了这一点?其实并没有,元胞数组每一个元素都是元胞类型,这正好符合上述特性。而每一个元胞都可以存储任意类型的数据,才形成了元胞数组可以同时存储不同类型的数据。

1. 元胞数组的创建

  • 使用符号{ }来创建
% 2x3的元胞数组
C = {true, 2, \'text\'; [], rand(5, 10, 2), {11; 22; 33}}

代码运行结果如下。生成了2x3的元胞数组C,其中分别包含了逻辑型、数值型、字符数组、空数组、三维数组、元胞数组。

  • 使用函数cell()来创建
% 3x3的元胞数组
C1 = cell(3)
% 3x3的元胞数组
C2 = cell(3,2)

代码运行结果如下。分别生成了3x3的元胞数组和3x2的元胞数组,其中每个元胞存储的内容都是空数组。

2. 元胞数组的寻访

元胞数组的寻访有下面两种情况,一种是用()寻访元胞数组的内容,即元胞;另一种是用{}寻访元胞数组中元胞的内容。

C = {true, 2, \'text\'; [], rand(5, 10, 2), {11; 22; 33}};
D1 = C(1, 1)  % 元胞数组C中第一行第一列的元胞
D2 = C{1, 1}  % 元胞数组C中第一行第一列的元胞的存储内容

代码运行结果如下。D1是元胞类型,而D2是逻辑型。

下面举个例子,说明两者区别。

% 定义一个1x1的元胞数组
C = {\'text\'};
% 做法一,可以取出\'text\'的第二个字符e
a1 = C{1}(2)
% 做法二,不能取出\'text\'的第二个字符e,报错
a2 = C(1)(2)
% 做法三,不能取出\'text\'的第二个字符e,报错
a3 = C(1)
a4 = a3(2)

代码运行结果如下。做法一是正确的。做法二和做法三是等价的,都是错误的。以做法三来分析,a3依然是一个1x1的元胞数组,和C一样。a3(2)的含义是取出元胞数组a3的第二个元胞,结果当然是超出纬度。

3. 对于元胞数组进行赋值

由于元胞数组的寻访有上述的两种,那对它进行赋值也有两种。

C = {true, 2, \'text\'; [], rand(5, 10, 2), {11; 22; 33}};
% 做法一:赋值后,C中第一行第一列的元胞不是原来的元胞,而是新创建的元胞
C(1,1) = {\'hello1\'}
% 做法二:赋值后,C中第一行第一列的元胞还是原来的元胞,但是元胞的存储内容改变了。 C{1,1} = \'hello2\'

代码运行结果如下。做法一实际上是更换元胞数组的元胞,做法二实际上是更换元胞数组中元胞的存储内容。

上面说的是对元胞数组中已有的元胞进行操作,而这里要说的是元胞数组的扩充

与上面的赋值一样,可以使用上述两种做法扩充元胞数组。但是,用这两种方法扩充元胞数组,新的元胞数组将是包含新增元素的最小元胞数组,而其它新增的元胞将会是空数组。此外,还可以用拼接的方法扩充元胞数组。根据拼接的方式(垂直拼接和水平拼接),待拼接的元胞数组必须符合对应的纬度要求。

figure
% 2x1的元胞数组
C = {2; \'text\'};
subplot(2, 2, 1);
title(\'55\');
cellplot(C);
title(\'原元胞数组\')

%做法一:
C(1, 2) = {\'扩展1\'};
subplot(2, 2, 2);
cellplot(C);
title(\'扩展一\');

%做法二:
C(2, 3) = {\'扩展2\'};
subplot(2, 2, 3);
cellplot(C);
title(\'扩展二\');

%做法三:水平拼接,待拼接的元胞数组的行数必须相等
C = [C, C];
subplot(2, 2, 4);
cellplot(C);
title(\'拼接\');

代码运行结果如下。

4. 元胞数组的常用操作函数

有很多函数可以作用于元胞数组,下面举几个常用函数的简单用法。更多函数见元胞数组的官方帮助文档

  • 函数celldisp(),用文字方式显示元胞数组所有元胞的内容。
  • 函数cellplot(),用图形方式显示元胞数组所有元胞的内容。
  • 函数cellfull(),对元胞数组所有元胞执行一个函数。
C = {\'text\', rand(2, 2)};
disp(\'这是celldisp\');
celldisp(C);
cellplot(C);
title(\'这是cellplot\');
disp(\'这是cellfun\');
cellfun(\'isreal\', C)      

代码运行结果如下。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
详述Delphi的MessageBox对话框发布时间:2022-07-18
下一篇:
在Delphi中动态建立数据库结构发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap