MATLAB数据类型


 时隔这么久又可以开始MATLAB系统的学习了,这一周都在忙多元变量统计分析这门课的课程设计,代码已经完成的差不多了,只剩下最后的课程报告了,等下周加把劲就能全部完成了。其实通过这次课程设计MATLAB的熟练水平也提高了许多,不过系统的学习不能落下,想要真正掌握任何一门计算机语言都要去系统的学习。

 上次学习了MATLAB的矩阵操作,这可以说是MATLAB的核心了,因为MATLAB全称就是矩阵实验室的意思(Matrix Laboratory)。这次简单学习一下MATLAB的数据类型,做个了解就好。

 MATLAB数据类型主要有整数、单精度浮点数、双精度浮点数三类。默认情况下,MATLAB对所有数值按双精度浮点类型进行存储操作。这时如果想将数据类型设置成整数类型时,需要用到转换函数:

函数 运算法则 示例
floor 向下取整 floor(3.5) = 3;floor(-3.5)=4
ceil 向上取整 ceil(3.5)=4; ceil(-3.5)=-3
round 去最接近整数,如小数部分为0.5,则向绝对值大的方向取整 round(3.5)=4; round(1.4)=1
fix 向0取整 fix(1.3) = 1; fix(-3.5) = -3

复数

函数 说明
complex(a,b) 构造以a为实部,b为虚部的复数
real(z) 返回复数z的实部
abs(z) 返回复数z的模
i,j 复数标识
img(z) 返回复数的虚部
angle(z) 返回复数z的辐角
conj(z) 返回z的共轭复数

MATLAB用Inf-Inf来表示正无穷量和负无穷量,NaN表示非数值量。正负无穷量一般由于运算溢出产生,非数值量则是由于类似0/0,或者Inf/Inf类型的非正常运算产生。

结构

 MATLAB的结构与C语言类似,一个结构通过字段存储不同类型的数据。一个结构相当于一个容器,可以把多个相关联的不同类型数据封装在一个结构对象中。

  1. 通过字段赋值创造结构
>>  patient.name = 'zhang san';
>> patient.billing = 200;
>> patient.test= [2 4 6 4 2 3 6];;
>> patient

patient = 

  包含以下字段的 struct:

       name: 'zhang san'
    billing: 200
       test: [2 4 6 4 2 3 6]

>> whos
  Name         Size            Bytes  Class     Attributes

  patient      1x1               610  struct             
  1. 利用struct函数创建结构
>> patient = struct('name','john','billing',200,'test',[2 3 4 5 6 7])

patient = 

  包含以下字段的 struct:

       name: 'john'
    billing: 200
       test: [2 3 4 5 6 7]
  1. 访问结构对象
>> patient(2).name = 'swift';
>> patient(2).billing = 500;
>> patient(2).test = [34 2 56 43 2]

patient = 

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

    name
    billing
    test

>> patient(1).billing

ans =

   200

>> patient(2).name

ans =
    'swift'
  1. 连接结构对象
>> patient2 = [patient(1) patient(2)]

patient2 = 

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

    name
    billing
    test

单元数组

 元组是一种广义矩阵,一个单元可以包括一个任意数组,可以是数值数、字符串数组、结构体数组或其他数组。每一个单元具有不同的尺寸和内存占有空间。

  1. 创建单元数组
>> A  = {'x',[2;3;4],2*pi};
>> B = cell(2,2);
>> A

A =

  1×3 cell 数组

    {'x'}    {3×1 double}    {[6.2832]}

>> B

B =

  2×2 cell 数组

    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}
  1. 访问单元数组

 单元外标识使用圆括号操作,C(m,n)表示第m行第n列的单元;单元内编址使用大括号进行操作,C{m,n}表示第m行第n列的单元中的内容。

>> A = {'x',[1 2 3 4];10,2*pi}

A =

  2×2 cell 数组

    {'x' }    {1×4 double}
    {[10]}    {[  6.2832]}

>> A(1,2)

ans =

  1×1 cell 数组

    {1×4 double}

>> A{1,2}

ans =

     1     2     3     4
  1. 单元数组中的操作

合并操作:

>> A

A =

  2×2 cell 数组

    {'x' }    {1×4 double}
    {[10]}    {[  6.2832]}

>> b = {'janes'};
>> C = {A b}

C =

  1×2 cell 数组

    {2×2 cell}    {1×1 cell}

删除操作:

>> A1 =A

A1 =

  2×2 cell 数组

    {'x' }    {1×4 double}
    {[10]}    {[  6.2832]}

>> A1{1,2} = []

A1 =

  2×2 cell 数组

    {'x' }    {0×0 double}
    {[10]}    {[  6.2832]}

改变形状操作:

>> A

A =

  2×2 cell 数组

    {'x' }    {1×4 double}
    {[10]}    {[  6.2832]}

>> newA = reshape(A,1,4)

newA =

  1×4 cell 数组

    {'x'}    {[10]}    {1×4 double}    {[6.2832]}

函数句柄

创建函数句柄的一般语法格式:

Function_Handle = @Function_Filename;

>> F = @exp

F =

  包含以下值的 function_handle:

    @exp

>> x = 0:0.1:2

x =113

         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000    1.0000    1.1000    1.20001421

    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000    1.9000    2.0000

>> F(x)

ans =113

    1.0000    1.1052    1.2214    1.3499    1.4918    1.6487    1.8221    2.0138    2.2255    2.4596    2.7183    3.0042    3.32011421

    3.6693    4.0552    4.4817    4.9530    5.4739    6.0496    6.6859    7.3891

映射容器

 映射容器可以将一个量映射到另一个量。例如,一个字符串映射到一个数值,那么相应的字符串就是映射的键(key),相应的值就是映射的数据(value)。可以将Map容器理解为一种快速键查找数据结构。

 一个键可以是以下任何一种数据类型:

  • 1*N字符串
  • 单精度或者双精度的实数标量
  • 有符号或者无符号的标量整数

Map类的属性:

属性 说明
Count 无符号64位整数,表示Map对象中存储的Key/Value对的总数
KeyType 字符串,表示Map对象中包括的Key的类型
ValueType 字符串,Map对象中包括的数据类型
  1. 创建Map对象
k =

  1×7 cell 数组

    {'A'}    {'B'}    {'C'}    {'D'}    {'E'}    {'F'}    {'G'}

>> v = {23 345 236 457 213 267 654}

v =

  1×7 cell 数组

    {[23]}    {[345]}    {[236]}    {[457]}    {[213]}    {[267]}    {[654]}

>> obj = containers.Map(k,v)

obj = 

  Map - 属性:

        Count: 7
      KeyType: char
    ValueType: double
  1. 查看和读取Map对象
>> keys(obj)

ans =

  1×7 cell 数组

    {'A'}    {'B'}    {'C'}    {'D'}    {'E'}    {'F'}    {'G'}

>> values(obj)

ans =

  1×7 cell 数组

    {[23]}    {[345]}    {[236]}    {[457]}    {[213]}    {[267]}    {[654]}

Map对象数据寻访:

>> obj('F')

ans =

   267

>> values(obj,{'A','D','E'}) %访问多个键

ans =

  1×3 cell 数组

    {[23]}    {[457]}    {[213]}
  1. 编辑Map对象

删除

>> obj

obj = 

  Map - 属性:

        Count: 7
      KeyType: char
    ValueType: double

>> remove(obj,'G')

ans = 

  Map - 属性:

        Count: 6
      KeyType: char
    ValueType: double

增加:

>> obj('G') = 234

obj = 

  Map - 属性:

        Count: 7
      KeyType: char
    ValueType: double

>> values(obj)

ans =

  1×7 cell 数组

    {[23]}    {[345]}    {[236]}    {[457]}    {[213]}    {[267]}    {[234]}

修改:

>> obj('A') = 123

obj = 

  Map - 属性:

        Count: 7
      KeyType: char
    ValueType: double

>> values(obj)

ans =

  1×7 cell 数组

    {[123]}    {[345]}    {[236]}    {[457]}    {[213]}    {[267]}    {[234]}

数据类型和数据转换

函数 说明
isnumeric 判断是否为数值数组
isobject 判断是否为MATLAB对象
isa …归属特定的类
iscell …单元数组
ischar …字符数组
isreal …实数
isscalar …标量
isstruct …结构数组
isvector …向量
class 判断对象所属的类
validateattributes 验证数组有效性
whos 列举变量类型相关的数据
isfield 判断是否为类的字段

 数据类型的转换函数:

函数 说明
char 转换为字符类型
int2str 整数转换为字符串
mat2str 矩阵转换为字符串
num2str 数值转换为字符串
str2double 字符串转换为浮点数
str2num 字符串转换为数值
cell2mat 单元数组转换为数值数组
cell2struct 单元数组转换为结构数组
mat2cell 数值数组转换为单元数组
cellstr 从字符串中创建字符数组
num2cell 数值数组转换为单元数组
struct2cell 结构数组转换为单元数组

文章作者: HANABI
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HANABI !
评论
  目录