MATLAB学习笔记8

Matlab学习笔记 Day8

注:仅供学习使用,部分内容来自学校课程课件或网络,理性探讨。

1.架构数组元素的引用
架构数组元素可以通过架构数组的名称、下标、域名来引用。具体格式为:架构数组名(下标).域名

2.动态域名
动态域名(域名是字符串变量)的情况,用help paren命令,有关于动态域名说明。

3.域值操作函数
(1)获取架构数组的域名
NAMES = fieldnames (S) : 返回一个元胞数组NAMES,NAME{i}是架构数组S的第i个域名(字符串),因此,NAMES是一个由字符串组成的元胞数组
(2)获取域值
F = getfield(S,‘field’) :获取单架构S由‘field’指定的域的域值,注意:S必须是1x1的架构数组,等价于语句F = S.field。
F = getfield (S,{i,j},‘field’,{k}):等价于F = S(i,j).field(k),注意花括号和圆括号的使用。
(3)设置域值
S = setfield(S,‘field’,V):等价于S.field=V。将单架构S由’field’指定的域的域值设置为V,注意:S必须是1x1的架构数组格式
S = setfield (S,{i,j},‘field’,{k},V) :等价于S(i,j).field(k)=V

4.架构数组的扩充和收缩
(1)域的增加和删除
①S = rmfield(S,‘field’):从架构数组S中删除域field,删除架构数组的域是对整个架构数组实施的删除子域只影响被操作的那个架构,而不影响整个架构数组。
增加域的操作影响整个架构数组,但增加子域的操作只能影响被操作的那个架构,而不影响整个架构数组
(2)与架构数组有关的两个逻辑函数
isstruct(S):如果S是架构数组,返回1,否则返回0
isfield(S,‘field’):如果field是架构数组S的域名,则返回1,否则返回0
(3)help datatypes命令可以了解有哪些数据类型及相应的转换函数、数据类型判断函数、元胞数组的基本函数、架构数组的基本函数、数组函数、函数句柄的基本函数

例题:

>> S.Name='Li Ming'; S.No='19990101';S.Class='199901';
S(2).Name='Zhang Mei'; S(2).No='19990102';
S(2).sex='F';  S(2).exams=[90 82 88];
>> S(2).average=mean(S(2).exams)

S = 

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

    Name
    No
    Class
    sex
    exams
    average

 %①为S(1)增加导师域,然后查看S(1).Supervisor,S(2).Supervisor
 %增加域的操作影响整个架构数组,但增加子域的操作只影响被操作的那个架构,而不影响整个架构数组
 
>> S(1).Supervisor.No='01065';   
S(1). Supervisor.Name='A';
S(1). Supervisor.Course={'Matlab', 'Computer Graphics', 'CAGD'};
>> S(1).Supervisor,S(2).Supervisor

ans = 

  包含以下字段的 struct:

        No: '01065'
      Name: 'A'
    Course: {'Matlab'  'Computer Graphics'  'CAGD'}


ans =

     []

%②再为S(2).Supervisor赋值,然后查看S(1).Supervisor,S(2).Supervisor

>> S(2). Supervisor=struct('No',01066, 'Name', 'B', 'Course',{ {'C', 'C++' } });  
>> S(1).Supervisor,S(2).Supervisor

ans = 

  包含以下字段的 struct:

        No: '01065'
      Name: 'A'
    Course: {'Matlab'  'Computer Graphics'  'CAGD'}


ans = 

  包含以下字段的 struct:

        No: 1066
      Name: 'B'
    Course: {'C'  'C++'}

%③删除架构数组S的sex和average两个域然后查看S(1)和S(2)
%删除架构数组的域是对整个架构数组实施的

>> S=rmfield(S,{'sex', 'average'});
>> S(1),S(2)

ans = 

  包含以下字段的 struct:

          Name: 'Li Ming'
            No: '19990101'
         Class: '199901'
         exams: []
    Supervisor: [1×1 struct]


ans = 

  包含以下字段的 struct:

          Name: 'Zhang Mei'
            No: '19990102'
         Class: []
         exams: [90 82 88]
    Supervisor: [1×1 struct]

%④删除S(1).Supervisor中的Course然后查看S(1).Supervisor,S(2).Supervisor
%删除子域的操作只影响被操作的那个架构,而不影响整个架构数组

>> S(1).Supervisor=rmfield(S(1).Supervisor,'Course');
>> S(1).Supervisor,S(2).Supervisor

ans = 

  包含以下字段的 struct:

      No: '01065'
    Name: 'A'


ans = 

  包含以下字段的 struct:

        No: 1066
      Name: 'B'
    Course: {'C'  'C++'}

%⑤删除Supervisor域再查看S(1)与S(2)

>> S=rmfield(S,'Supervisor');
>> S(1),S(2)

ans = 

  包含以下字段的 struct:

     Name: 'Li Ming'
       No: '19990101'
    Class: '199901'
    exams: []


ans = 

  包含以下字段的 struct:

     Name: 'Zhang Mei'
       No: '19990102'
    Class: []
    exams: [90 82 88]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值