【003.Matlab基础 数组】

来源:互联网 发布:大张伟 天天向上 知乎 编辑:程序博客网 时间:2024/06/06 11:05

数值是Matlab进行计算和处理的核心内容之一,出于快速计算的需要,Matlab总把数组看作存储和运算的基本单元,标量数据也被看作是(1×1)的数组

一维数组的创建

>> format compact>> A1=[0 pi 0.5*pi 0.7 1.5]A1 =         0    3.1416    1.5708    0.7000    1.5000>> A2=0:0.5:3A2 =         0    0.5000    1.0000    1.5000    2.0000    2.5000    3.0000>> A3=linspace(1,6,7)A3 =    1.0000    1.8333    2.6667    3.5000    4.3333    5.1667    6.0000>> A4=logspace(1,6,7)A4 =   1.0e+06 *    0.0000    0.0001    0.0005    0.0032    0.0215    0.1468    1.0000
  • 直接输入法:可以直接通过空格、逗号和分号来分隔数组元素,在数组中输入任意元素,生成一维数组
  • 步长生成法:x=a:inc:b ,ab为一维向量数组的起始数值和终止数值,inc为数组的间隔步长;如果ab为整数时,省略inc可以生成间隔为1的数列。inc也可以采用负数。
  • 等间距线形生产方法:x=linspace(a,b,n),这种方法采用函数在ab之间的区间内得到n个线性采样数据点
  • 等间距对数生成方法:x=logspace(a,b,n),在设定采样点总个数n的情况下,采用常用的对数计算得到n个采样点数据值。

访问数组内容

>> x=linspace(1,6,7)x =    1.0000    1.8333    2.6667    3.5000    4.3333    5.1667    6.0000>> x(5)    %索引访问数组元素ans =    4.3333>> x(2:5)    %访问一块数据ans =    1.8333    2.6667    3.5000    4.3333>> x(3:end)    %访问一块数据ans =    2.6667    3.5000    4.3333    5.1667    6.0000>> x(1:2:7)    %构造访问数组ans =    1.0000    2.6667    4.3333    6.0000>> x([1,4,6,3,3,3,2,2,2,2])    %直接构造访问数组ans =    1.0000    3.5000    5.1667    2.6667    2.6667    2.6667    1.8333    1.8333    1.8333    1.8333>> x([1 4 6 3 3 3 2 2 2 2 ])    %直接构造访问数组ans =    1.0000    3.5000    5.1667    2.6667    2.6667    2.6667    1.8333    1.8333    1.8333    1.8333

一维数组可以是一个行向量,也可以是一列多行的列向量。在定义的过程中,如果元素之间通过“;”分隔元素,那么生成的向量是列向量;而通过空格或逗号分隔的元素则为行向量。列向量和行向量之间可以通过转置操作“’”来进行相互转化。如果一维数组元素是数组,那么经过转置操作后,得到的是复数的共轭转置结果,而采用点-共轭转置操作时得到的是转置数组

>> A=[1;2;3;4;5]A =     1     2     3     4     5>> B=A'B =     1     2     3     4     5>> C=linspace(1,10,5)C =    1.0000    3.2500    5.5000    7.7500   10.0000>> C=linspace(1,10,5)'C =    1.0000    3.2500    5.5000    7.7500   10.0000>> Z=A+C*IUndefined function or variable 'I'. Did you mean:>> Z=A+C*iZ =   1.0000 + 1.0000i   2.0000 + 3.2500i   3.0000 + 5.5000i   4.0000 + 7.7500i   5.0000 +10.0000i>> Z1=Z'Z1 =   1.0000 - 1.0000i   2.0000 - 3.2500i   3.0000 - 5.5000i   4.0000 - 7.7500i   5.0000 -10.0000i>> Z2=Z.'Z2 =   1.0000 + 1.0000i   2.0000 + 3.2500i   3.0000 + 5.5000i   4.0000 + 7.7500i   5.0000 +10.0000i

多维数组的创建

二维数组(即矩阵)的创建
- 直接输入二维数组元素来创建
- 通过Array Editor来输入二维数组

这里写图片描述

  • 对于大规模数据,可以通过数据表格方式来输入,可单击选择空间的图标这里写图片描述选中已经编写好的矩阵数据文件后,导入到工作空间中。
  • 可以通过Matlab所提供的其他函数来生成二维数组。
>> clear>> A=[1 2 3 4;linspace(0,5,4);1:2:7;3:7]Error using vertcatDimensions of matrices being concatenated are not consistent. >> A=[1 2 3 4;linspace(0,5,4);1:2:7;3:6]A =    1.0000    2.0000    3.0000    4.0000         0    1.6667    3.3333    5.0000    1.0000    3.0000    5.0000    7.0000    3.0000    4.0000    5.0000    6.0000>> B=[123]B =   123>> B=[1 2 3  % Shift+回车      4 5 6      7 8 9]B =     1     2     3     4     5     6     7     8     9

多维数组创建
多维数组(n维数组),如在三位数组中存在行、列和这样三维,在每一页中存在行和列。

  • 直接创建法。可选择一些内置函数来创建,如zeros、ones、rand、randn等。
  • 通过直接索引的方法进行创建。
  • 使用reshape和repmat将二维数组转换为三维数组。
  • 使用cat函数将低维数组转化为高维数组
>> A=zero(3,4,2)Undefined function 'zero' for input arguments of type 'double'. >> A=zeros(3,4,2)A(:,:,1) =     0     0     0     0     0     0     0     0     0     0     0     0A(:,:,2) =     0     0     0     0     0     0     0     0     0     0     0     0>> B=zeros(2,3)B =     0     0     0     0     0     0>> B(:,:,2)=ones(2,3)B(:,:,1) =     0     0     0     0     0     0B(:,:,2) =     1     1     1     1     1     1>> B(:,:,3)=4B(:,:,1) =     0     0     0     0     0     0B(:,:,2) =     1     1     1     1     1     1B(:,:,3) =     4     4     4     4     4     4>> C=reshape(B,2,9)C =     0     0     0     1     1     1     4     4     4     0     0     0     1     1     1     4     4     4>> C=(B(:,:,1)B(:,:,2)B(:,:,3)) C=(B(:,:,1)B(:,:,2)B(:,:,3))            |Error: Unexpected MATLAB expression.Did you mean:>> C = [B(:,:,1) B(:,:,2) B(:,:,3)]C =     0     0     0     1     1     1     4     4     4     0     0     0     1     1     1     4     4     4>> reshape(C,2,3,3)ans(:,:,1) =     0     0     0     0     0     0ans(:,:,2) =     1     1     1     1     1     1ans(:,:,3) =     4     4     4     4     4     4>> reshape(C,[3,2,3])ans(:,:,1) =     0     0     0     0     0     0ans(:,:,2) =     1     1     1     1     1     1ans(:,:,3) =     4     4     4     4     4     4>> C=[1 2 3 4 5 6 7 8 9;10 11 12 13 14 14 16 17 18]C =     1     2     3     4     5     6     7     8     9    10    11    12    13    14    14    16    17    18>> reshape(C,[3,2,3])ans(:,:,1) =     1    11    10     3     2    12ans(:,:,2) =     4    14    13     6     5    14ans(:,:,3) =     7    17    16     9     8    18>> D=ones(3,2)D =     1     1     1     1     1     1>> repmat(D,[1,2,3])ans(:,:,1) =     1     1     1     1     1     1     1     1     1     1     1     1ans(:,:,2) =     1     1     1     1     1     1     1     1     1     1     1     1ans(:,:,3) =     1     1     1     1     1     1     1     1     1     1     1     1>> D=[1 2 3;4 5 6]'D =     1     4     2     5     3     6>> repmat(D,[1,2,3])ans(:,:,1) =     1     4     1     4     2     5     2     5     3     6     3     6ans(:,:,2) =     1     4     1     4     2     5     2     5     3     6     3     6ans(:,:,3) =     1     4     1     4     2     5     2     5     3     6     3     6>> X=zeros(2)X =     0     0     0     0>> Y=ones(2)Y =     1     1     1     1>> Z=repmat(2,2,2)Z =     2     2     2     2>> AA=cat(3,X,Y,Z)AA(:,:,1) =     0     0     0     0AA(:,:,2) =     1     1     1     1AA(:,:,3) =     2     2     2     2>> AA=cat(2,X,Y,Z)AA =     0     0     1     1     2     2     0     0     1     1     2     2>> AA=cat(1,X,Y,Z)AA =     0     0     0     0     1     1     1     1     2     2     2     2

数组的运算

  • 点方式运算表明是数组元素之间的运算关系
  • 直接进行乘、除、乘方运算则是向量或矩阵之间的运算关系
  • 对于向量的除法运算,左除(\)和右除(/)的意义不同,两者之间除数和被除数是不同的

常用的标准数组

函数 说明 备注 eye 生成单位矩阵 适用于生成二维矩阵 ones 生成全1数组 rand 生成随机数组,数组元素均匀分布 randn 生成随机数组,数组元素服从正态分布 zeros 生成全0数组
>> eye(3)ans =     1     0     0     0     1     0     0     0     1>> randn(3)ans =    0.5377    0.8622   -0.4336    1.8339    0.3188    0.3426   -2.2588   -1.3077    3.5784>> rand(3)ans =    0.9649    0.9572    0.1419    0.1576    0.4854    0.4218    0.9706    0.8003    0.9157>> A=1:4A =     1     2     3     4>> diag(A,1)ans =     0     1     0     0     0     0     0     2     0     0     0     0     0     3     0     0     0     0     0     4     0     0     0     0     0>> diag(A)ans =     1     0     0     0     0     2     0     0     0     0     3     0     0     0     0     4>> diag(A,-3)ans =     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0     2     0     0     0     0     0     0     0     3     0     0     0     0     0     0     0     4     0     0     0

下节:低维数组的寻址和搜索、低维数组的处理函数、高维数组的处理函数和运算

0 0