MATLAB学习笔记二——元胞数组、结构体

元胞数组是一种数组的数据类型,废话不多说,看代码

clc
clear all
A = cell(1,6) %创建一个一行六列的元胞数组,其中包含1x6个0行0列矩阵
A{2} = eye(3) 
%eye(N),返回N*N大小的单位矩阵
%这里就是将A数组第2个矩阵赋值为3x3的单位矩阵(方阵)
%注意A数组里矩阵的位置{}从1开头
A{5}=magic(4) %将A数组第5个矩阵赋值为4x4的4阶幻方矩阵
B=A{5} %用B矩阵表示A数组的第5个矩阵是什么东西

让我们逐一分析

  • 创建元胞数组
A = cell(1,6) %创建一个一行六列的元胞数组,其中包含1x6个0行0列矩阵

命令行窗口可得结果为
A =

1×6 cell 数组

{0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}

  • 数组内矩阵赋值,eye函数用法
A{2} = eye(3) 
%eye(N),返回N*N大小的单位矩阵
%这里就是将A数组第2个矩阵赋值为3x3的单位矩阵(方阵)
%注意A数组里矩阵的位置{}从1开头

结果为
A =

1×6 cell 数组

{0×0 double} {3×3 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}

  • 数组内矩阵赋值,magic函数用法及表达
A{5}=magic(4) %将A数组第5个矩阵赋值为4x4的4阶幻方矩阵
B=A{5} %用B矩阵表示A数组的第5个矩阵是什么东西

何为幻方(magic)?如图所示
在这里插入图片描述

结果为
A =

1×6 cell 数组
{0×0 double} {3×3 double} {0×0 double} {0×0 double} {4×4 double} {0×0 double}

B =

16     2     3    13
 5    11    10     8
 9     7     6    12
 4    14    15     1

不难看出,主对角线、副对角线、每行、每列加起来都等于34.

结构体

  • 结构体创建格式:
s = struct(field,value)

创建具有指定字段和值的结构体数组。

  • 代码分析

看一段代码

clc
clear all
books = struct('name',{{'laoba','laoma'}},'price',[20 50])
%创建一个结构体,包含name(书名),分别叫laoba、laoma;包含price(价格),
%分别是20,50元,也是一个1x2的矩阵。这个结构体赋值给books
%语法如此
books.name %选择books.name这个属性,name字段包含1行2列的元胞数组,数组中
%包含{'laoba'},{'laoma'}的子元胞数组
books.name(1) %取出name中的第一个1行1列(子)元胞数组,也就是{'laoba'}
books.name{1} %取出一个元胞数组name中的第一个值,也就是'laoba'
%总的来说,你就应该记住这两种取出方式分别取出的是什么。

小括号取出来的是cell数组。
大括号取出来的是字符串。

结果为

books = 

  包含以下字段的 struct:

     name: {'laoba'  'laoma'}
    price: [20 50]

>> books.name

ans =

  1×2 cell 数组

    {'laoba'}    {'laoma'}

>> books.name(1)

ans =

  1×1 cell 数组

    {'laoba'}     注意这是数组
ans =

    'laoba'   注意这是字符串。。。。

我觉得的吧这个结构体真是复杂,比如laoba、laoma那块为什么是两个大括号呢?

clc
clear all
books = struct('name',{'laoba','laoma'},'price',[20 50])
%创建一个结构体,包含name(书名),分别叫laoba、laoma;包含price(价格),
%分别是20,50元,也是一个1x2的矩阵。这个结构体赋值给books
%语法如此
books.name %选择books.name这个属性,name字段包含1行2列的元胞数组,数组中
%包含{'laoba'},{'laoma'}的子元胞数组
books.name(1) %取出name中的第一个1行1列(子)元胞数组,也就是{'laoba'}
books.name{1} %取出一个元胞数组name中的第一个值,也就是'laoba'
%总的来说,你就应该记住这两种取出方式分别取出的是什么。

如果我去掉的话,会有以下结果

books = 

  包含以下字段的 1×2 struct 数组:

    name
    price


ans =

    'laoba'


ans =

    'laoma'

需要花括号或点索引表达式中的一个输出,但结果有 2 个。

出错 test (line 9)
books.name(1) %取出name中的第一个1行1列(子)元胞数组,也就是{'laoba'}
 
>> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值