分享

Matlab数据类型—多维数组、元胞、字符、文本与结构体

 钟山紫竹林 2019-12-15

1.多维数组

p = perms(a)表示产生a中的所有全排列矩阵,例如:

简单应用:将一个4阶幻方矩阵进行全排列,共有4!=24种方案:

A = magic(4);M = zeros(4,4,24);p = perms(1:4);for k = 1:24 M(:,:,k) = A(:,p(k,:));end

将24个幻方矩阵存储在了三维数组M中,M的大小为4*4*24。

sum(M,d)通过改变第d个下标来计算总和

sum(M,1)得到一个1*4*24的数组

sum(M,2)得到一个4*1*24的数组

sum(M,3)表示将24个矩阵块对应位置求和,得到一个4*4*1的数组,相当于4*4的矩阵

2.元胞数组

特点:

1.可以存储大小不同的矩阵序列

2.检索内容时,使用大括号下标进行索引,A{1}

3.包含其他数组的副本,而不包含指向这些数组的指针,即修改原值,元胞里的内容不变

注意()索引与{}索引的区别!!!

3.字符文本

S = ‘Hello Matlab’          S的大小为1*12的字符数组

a = double(S)    转化为ASCII码

字符的串联:

垂直连接时两个单词的长度必须相同!!!!

包含不同长度的字符:

创建字符数组时,数组各行的长度必须相同(使用空格填充较短行的末尾)char 函数可执行这种填充操作!!!

不需要任何填充的 5×1 元胞数组,该数组的各行可以具有不同的长度!!!

cellstr()  将填充后的字符数组转换为字符向量元胞数组:

char()进行逆操作!!

4.Matlab中的结构体

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

结构体也为数组,因此也可以插入其他元素:

注意:上式70写错了,没有单引号,因为是数字,不加单引号,加上后就变成了字符了!!!

结构体的索引:

s.score 与 s(1).score,s(2).score,s(3).score表达效果相同

要根据某个文本字段(例如,name)创建字符数组,可调用 char 函数:

括入大括号中,可以根据 name 字段创建元胞数组:

要将结构体数组的每个元素的字段赋值给结构体外部的单独变量:

结构体数据的访问:

最常用方法是指定要引用的字段的名称;

另一种方法是使用动态字段名称:

动态字段名称将字段表示为变量表达式,MATLAB 会在运行时计算这些表达式。例如将 expression 作为动态字段名称的写法:

structName.(expression)

使用标准 MATLAB 索引语法创建此字段的索引。例如,要在字段名称中计算 expression,并在第7行的 1 至 25 列获取该字段的值:

structName.(expression)(7,1:25)

动态字段名称示例-  下面显示的 avgscore 函数可用于计算考试的平均分数,并使用动态字段名称检索 testscores 结构体中的信息:

function avg = avgscore(test, student, first, last)for k = first:last   scores(k) = test.(student).week(k);endavg = sum(scores)/(last - first + 1);

您可以运行此函数,并对动态字段 student 使用不同值。首先,对包含 10周内的分数的结构体进行初始化:

test.Ann.week(1:25) = [95 89 76 82 79 92 94 92 89 81]; test.King.week(1:25) = [87 80 91 84 99 87 93 87 97 87];

在,运行 avgscore,并在运行时使用动态字段名称为 testscores 结构体提供学生姓名字段:

avgscore(test, 'Ann_Lane', 7, 22)avgscore(test, 'William_King', 7, 22)

参考:Matlab官方文档

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多