Matlab常用数据类型(一)

前言

总结一下matlab的常用数据类型,消除对matlab的陌生感,方便以后查询。

多维数组

Matlab中,向量可以视为一维数组,矩阵可以视为二维数组,维数≷2的都称为多维数组。
第三维称为”页”,第四维称为“箱”。

cat命令实现行并列并操作

A =

     1     2
     3     4

>> Z = cat(1,A,A)#行并

Z =

     1     2
     3     4
     1     2
     3     4

>> Z = cat(2,A,A)#列并

Z =

     1     2     1     2
     3     4     3     4

cell数组

可以将元胞数组看做一种无所不包的广义矩阵,其元素可以存储不同数据类型的数据。

  • cell数组的创建:

区别于一般矩阵,元胞数组使用花括号”{}”创建。

  • cell寻址:

元胞和元胞里的内容是两个不同范畴的东西,我理解为cell是一个指针数组,其元素一个指针,要想得到对应元素所指向的元素需要一层解引用。matlab中设计两种不同的操作:元胞外标识元胞内编址
A(2,4)指的是第2行第4列的元胞元素。
A{2,4}指的是元胞数组中第2行第4列的元胞内容。

>> cell_one = {1,'3','3'}

cell_one = 

    [1]    '3'    '3'

>> cell_one{2,3}=23 #改变元胞内容

cell_one = 

    [1]    '3'    '3' 
     []     []    [23]

>> cell_two = cell(2,2)

cell_two = 

    []    []
    []    []

>> cell_two(1,2)={1}#改变元胞内容

cell_two = 

    []    [1]
    []     []

>> cell_two{2,2}=3

cell_two = 

    []    [1]
    []    [3]

结构数组(structure)

类似于C++的结构体,结构是MATLAB提供的一种将选择的数据存储到一个实体的数据类型。用户可通过存储数据时指定的域名来对域中的数据进行访问。

structure数组的创建

  • 直接赋值法
>> strct.name = 'one'

strct = 

    name: 'one'

>> strct.sex = 'f'

strct = 

    name: 'one'
     sex: 'f'

>> strct(2).name = 'two'

strct = 

1x2 struct array with fields:

    name
    sex
  • 使用struct函数
>> struc = struct('name','one','sex','f','moneys',[1,2,3])

struc = 

      name: 'one'
       sex: 'f'
    moneys: [1 2 3]
>> 

需要注意的是,在结构数组的赋值过程中,如果需要将元胞数组赋值给结构数组需要用符号”{{}}”。

Map容器

map容器是一个快速键查找数据结构,可以提供多种方法对其中的个体元素进行寻访。相当于python中的键值对,不同的是一个map的键的数据类型必须是一致的。

Map对象的创建

Map是Map类中的对象,有三个只读的默认属性。需要注意的是在示例化Map对象之后KeyType、和ValueType就不能修改,即一个Map能接受到的键值对的类型在创建Map时就固定了。

Map类的只读属性

属性含义
Count存储键值对的个数
KeyType表示key的数据类型
ValueType表示value的数据类型,两种以上时为any
> map_null = containers.Map()

map_null = 

  Map (具有属性):

        Count: 0
      KeyType: char
    ValueType: any

>> map_null(1) = 1  % 空map的实例map_null的键应该是char
错误使用 containers.Map/subsasgn
指定的 key 类型与此容器所需的类型不匹配。

>> map_null('1') = 1

map_null = 

  Map (具有属性):

        Count: 1
      KeyType: char
    ValueType: any

>> mounth = {'Jan','Feb'};v = {327,363};
>> rainMap = containers.Map(mounth,v)

rainMap = 

  Map (具有属性):

        Count: 2
      KeyType: char
    ValueType: double

>> rainMap('g')='g'
错误使用 containers.Map/subsasgn
指定的 value 类型与此容器所需的类型不匹配。

>> 

查看Map的内容

可以通过keys方法查看Map中的所有键,values方法查看Map中的所有值。返回的cell数组。

>> rainMap.keys()

ans = 

    'Feb'    'Jan'    'g'

>> rainMap.values()

ans = 

    [363]    [327]    [3]

>> 

Map的读取

  1. Map只能通过键寻访对应的值,需要注意一下几点:
    • 输入不存在的键会报错。
    • 不支持整数下标索引。(除非对应的键就是整数)
    • 不支持冒号运算。
    • 需要同时对多个键进行寻访,可以使用values方法。

>> rainMap.keys()

ans = 

    'Feb'    'Jan'    'g'

>> rainMap.values()

ans = 

    [363]    [327]    [3]

>> rainMap(1)
错误使用 containers.Map/subsref
指定的 key 类型与此容器所需的类型不匹配。

>> rainMap('f')
错误使用 containers.Map/subsref
此容器中不存在指定的键。
>> rainMap.values({'Feb','Jan'})

ans = 

    [363]    [327]

Map是句柄对象

在Matlab中的类分为两种:句柄类实体值类。Map类的对象的赋值运算,其实是在创建一个对象副本。

>> mapa = containers.Map([1,2],{'2',3})

mapa = 

  Map (具有属性):

        Count: 2
      KeyType: double
    ValueType: any

>> mapb = mapa

mapb = 

  Map (具有属性):

        Count: 2
      KeyType: double
    ValueType: any

>> mapb(3)='g'

mapb = 

  Map (具有属性):

        Count: 3
      KeyType: double
    ValueType: any

>> mapa

mapa = 

  Map (具有属性):

        Count: 3
      KeyType: double
    ValueType: any

Table表类型

类似于python中的DataFrame,但是每一列的数据不要求是同一类型,而且行名和列名不需要指定为数字。

table创建

>>  name = {'tom';'jack'};
 height = {177,160}';
 tables = table(name,height,'rowname',{'1','22'});
>> tables

tables = 

           name     height
          ______    ______

    1     'tom'     [177] 
    22    'jack'    [160] 

>> tables.Properties

ans = 

             Description: ''
    VariableDescriptions: {}
           VariableUnits: {}
          DimensionNames: {'Row'  'Variable'}
                UserData: []
                RowNames: {2x1 cell}
           VariableNames: {'name'  'height'}

>> 

table元素的存取

>> tables(:,'name') % 'name'列

ans = 

           name 
          ______

    1     'tom' 
    22    'jack'
>> tables(1,:) % 第1行

ans = 

         name     height
         _____    ______

    1    'tom'    [177] 
>> tables('22',:) % '1'行

ans = 

           name     height
          ______    ______

    22    'jack'    [160] 
>> tables(:,1:2) 

ans = 

           name     height
          ______    ______

    1     'tom'     [177] 
    22    'jack'    [160] 

>> tables.height

ans = 

    [177]
    [160]
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值