元胞数组 char函数 结构体

元细胞组
MATLAB 中的元胞数组是以其他数组的副本为元素的多维数组。使用 cell 函数可以创建空矩阵的元胞数组。但是,更普遍的做法是,通过
将其他内容的集合括入花括号 {} 中来创建元胞数组。花括号还可以与下标配合使用,以便访问各个元胞的内容。例如,
         C = {A sum(A) prod(prod(A))}
生成一个 1×3 元胞数组。这三个元胞包含幻方矩阵、列总和的行向量及其所有元素的乘积。当显示 C 时,您会看到
         C = [4x4 double] [1x4 double] [20922789888000]

>>  A = magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

>> C = {A sum(A) prod(prod(A))}
C =
  1×3 cell 数组
    {4×4 double}    {1×4 double}    {[2.0923e+13]}

这是因为前两个元胞太大,无法在此有限空间中输出,但第三个元胞仅包含 16! 一个数字,因此有空间可以输出此数字。

请牢记以下两大要点。第一,要检索某个元胞的内容,请在花括号中使用下标。例如,C{1} 检索幻方矩阵,C{3} 为 16!。第二,元胞数组包含其他数组的副本,而不包含指向这些数组的指针。如果随后更改 A,C 不会发生变化。
使用三维数组可以存储相同大小的矩阵序列。元胞数组可用于存储不同大小的矩阵序列。例如,

M = cell(8,1);
for n = 1:8
   M{n} = magic(n);
end
M

生成具有不同顺序的幻方矩阵序列:

M = 
    [           1]
    [ 2x2  double]
    [ 3x3  double]
    [ 4x4  double]
    [ 5x5  double]
    [ 6x6  double]
    [ 7x7  double]
    [ 8x8  double]

在这里插入图片描述
使用以下命令可以检索 4×4 幻方矩阵: M{4}

char函数
要操作包含不同长度的行的文本主体,您有两种选择,即使用填充的字符数组或使用字符向量元胞数组。创建字符数组时,数组各行的长度必须相同。(使用空格填充较短行的末尾。)char 函数可执行这种填充操作。例如,
         S = char('A','rolling','stone','gathers','momentum.')
生成一个 5×9 字符数组:

>> S = char('A','rolling','stone','gathers','momentum.')
S =

  5×9 char 数组

    'A        '
    'rolling  '
    'stone    '
    'gathers  '
    'momentum.'

再者,您也可以将文本存储在元胞数组中。例如,
         C = {'A';'rolling';'stone';'gathers';'momentum.'}
创建一个不需要任何填充的 5×1 元胞数组,因为该数组的各行可以具有不同的长度:

>> C = {'A';'rolling';'stone';'gathers';'momentum.'}

C =

  5×1 cell 数组

    {'A'        }
    {'rolling'  }
    {'stone'    }
    {'gathers'  }
    {'momentum.'}

使用以下语句可以将填充后的字符数组转换为字符向量元胞数组:
         C = cellstr(S)

>> C = cellstr(S)
C =

  5×1 cell 数组

    {'A'        }
    {'rolling'  }
    {'stone'    }
    {'gathers'  }
    {'momentum.'}

使用以下语句可以逆转此过程
         S = char(C)

>> S = char(C)
S =

  5×9 char 数组

    'A        '
    'rolling  '
    'stone    '
    'gathers  '
    'momentum.'

结构体
结构体是多维 MATLAB 数组,包含可按文本字段标志符访问的元素。例如,

S.name = 'Ed Plum';
S.score = 83;
S.grade = 'B+'

创建一个具有三个字段的标量结构体:

S = 
     name: 'Ed Plum'
    score: 83
    grade: 'B+'

与 MATLAB 环境中的所有其他内容一样,结构体也为数组,因此可以插入其他元素。在本示例中,数组的每个元素都是一个具有若干字段的结构体。可以一次添加一个字段,

S(2).name = 'Toni Miller';
S(2).score = 91;
S(2).grade = 'A-';

也可以使用一个语句添加整个元素:

S(3) = struct('name','Jerry Garcia',... 
               'score',70,'grade','C')

现在,结构体非常大以致仅输出摘要:

S = 
1x3 struct array with fields:
    name
    score
    grade

将不同字段重新组合为其他 MATLAB 数组的方法有许多种。这些方法大多基于逗号分隔列表的表示法。键入 S.score
与键入S(1).score, S(2).score, S(3).score
相同,这是一个逗号分隔列表。

如果将生成此类列表的表达式括在方括号中,MATLAB 会将该列表中的每一项都存储在数组中。在本示例中,MATLAB 创建一个数值行向量,该向量包含结构体数组 S 的每个元素的 score 字段:

scores = [S.score]
scores =
    83    91    70
avg_score = sum(scores)/length(scores)
avg_score =
   81.3333

要根据某个文本字段(例如,name)创建字符数组,请对 S.name 生成的逗号分隔列表调用 char 函数:

names = char(S.name)
names =
   Ed Plum    
   Toni Miller
   Jerry Garcia

同样,通过将生成列表的表达式括入花括号中,可以根据 name 字段创建元胞数组:

names = {S.name}
names = 
    'Ed Plum'    'Toni Miller'    'Jerry Garcia'

要将结构体数组的每个元素的字段赋值给结构体外部的单独变量,请指定等号左侧的每个输出,并将其全部括在方括号中:

[N1 N2 N3] = S.name
N1 =
   Ed Plum
N2 =
   Toni Miller
N3 =
   Jerry Garcia
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值