【003.Matlab基础 数组】

数值是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:3
A2 =
         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 , a b为一维向量数组的起始数值和终止数值, inc 为数组的间隔步长;如果 a b为整数时,省略 inc 可以生成间隔为1的数列。 inc 也可以采用负数。
  • 等间距线形生产方法: x=linspace(a,b,n) ,这种方法采用函数在 a b之间的区间内得到 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*I
Undefined function or variable 'I'. 
Did you mean:
>> Z=A+C*i
Z =
   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 vertcat
Dimensions 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 <script type="math/tex" id="MathJax-Element-16">n</script>维数组),如在三位数组中存在行、列和这样三维,在每一页中存在行和列。

  • 直接创建法。可选择一些内置函数来创建,如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     0
A(:,:,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     0
B(:,:,2) =
     1     1     1
     1     1     1
>> B(:,:,3)=4
B(:,:,1) =
     0     0     0
     0     0     0
B(:,:,2) =
     1     1     1
     1     1     1
B(:,:,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     0
ans(:,:,2) =
     1     1     1
     1     1     1
ans(:,:,3) =
     4     4     4
     4     4     4
>> reshape(C,[3,2,3])
ans(:,:,1) =
     0     0
     0     0
     0     0
ans(:,:,2) =
     1     1
     1     1
     1     1
ans(:,:,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    12
ans(:,:,2) =
     4    14
    13     6
     5    14
ans(:,:,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     1
ans(:,:,2) =
     1     1     1     1
     1     1     1     1
     1     1     1     1
ans(:,:,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     6
ans(:,:,2) =
     1     4     1     4
     2     5     2     5
     3     6     3     6
ans(:,:,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     0
AA(:,:,2) =
     1     1
     1     1
AA(:,:,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:4
A =
     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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值