Day05 MATLAB数组

1. 手动输入数组

  • 单个称为标量的数值实际上是一个 1×1 数组,也即它包含 1 行 1 列。

    %格式:数组名 = 值1
    >> x = 4
    
  • 可以使用方括号创建包含多个元素的数组。

    %格式:数组名 = [值1 值2 值3 ...]  或 数组名 = [值1, 值2, 值3, ...]	一行多列
    %格式:数组名 = [值1; 值2; 值3; ...]  一列多行
    >> x = [3 5]
    
    x =
    
         3     5
    
    
    
    

>> x = [3; 5]

x =

     3
     5

  • 可以组合使用空格和分号来创建一个矩阵,即包含多行多列的数组。输入矩阵时,您必须逐行输入它们。
>> x = [5,6,7;8,9,10]

x =

     5     6     7
     8     9    10
  • 在 MATLAB 中,您可以在方括号内执行计算。

    >> x = [abs(-4) 4^2]
    x = 
         4    16
    

2. 创建等行距向量

  • 等行距向量即相邻俩向量差的绝对值为1

  • 创建等间距向量的替代便捷方法是使用 : 运算符并仅指定起始值和最终值。

    >> y = 5:8
    y = 
        5    6    7    8
    
  • : 运算符使用默认的间距 1,但是您可以指定您自己的间距,如下所示。

    >> x = 20:2:26
    x = 
        20    22    24    26
    
  • 如果您知道向量中所需的元素数目(而不是每个元素之间的间距),则可以改用 linspace 函数:

    linspace(first,last,number_of_elements)
    

    注意,请使用逗号 (,) 分隔 linspace 函数的输入。

    %前两个值表示范围,第三个值表示元素个数
    >> x = linspace(0,1,5)
    x = 
        0    0.250    0.500    0.750    1.000
    
  • 可以使用转置运算符 (') 将行向量转换为列向量。

    x = 1:3;
    x = x'
    x = 
        1
        2
        3
    

3. 数组创建函数

  • MATLAB 包含许多函数,可帮助您创建常用的矩阵,例如随机数矩阵。

    x = rand(2)
    x = 
        0.8147    0.1270
        0.9058    0.9134
    

    请注意,rand(2) 命令中的 2 指定输出将为一个 2×2 的随机数矩阵。

  • 许多矩阵创建函数允许您输入一个数值来创建方阵 (n×n),或者输入两个数值来创建非方阵。

    %矩阵创建函数里面输入一个值,创建的是方阵
    >> x = rand(2)
    x = 
        0.8147    0.1270
        0.9058    0.9134
    
    %矩阵创建函数里面输入两个值,创建的是非方阵
    %表示2行3列
    >> x = rand(2,3)
    x = 
        0.6324    0.2785    0.9575
        0.0975    0.5469    0.9649
    
    %矩阵创建函数里面输入三个值,创建的是非方阵,第三个数表示创建的矩阵个数
    >> x = rand(2,3,4)
    
    x(:,:,1) =
    
        0.8147    0.1270    0.6324
        0.9058    0.9134    0.0975
    
    
    x(:,:,2) =
    
        0.2785    0.9575    0.1576
        0.5469    0.9649    0.9706
    
    
    x(:,:,3) =
    
        0.9572    0.8003    0.4218
        0.4854    0.1419    0.9157
    
    
    x(:,:,4) =
    
        0.7922    0.6557    0.8491
        0.9595    0.0357    0.9340
    
    
  • 使用 zeros 函数创建一个包含 63 列 (6×3) 的全零矩阵。将结果赋给名为 x 的变量。

    >> x = zeros(6,3)
    
    x =
    
         0     0     0
         0     0     0
         0     0     0
         0     0     0
         0     0     0
         0     0     0
    
  • size函数—知道现有矩阵的大小

    >> size(x)
    
    ans =
    
         6     3
    
  • rand(size(x))—创建一个与x大小相同的随机矩阵

    >> rand(size(x))
    
    ans =
    
        0.6787    0.7060    0.6948
        0.7577    0.0318    0.3171
        0.7431    0.2769    0.9502
        0.3922    0.0462    0.0344
        0.6555    0.0971    0.4387
        0.1712    0.8235    0.3816
    

4. 对数组进行索引(根据元素在数组中的位置找到该元素)

  • 格式:x(行, 列) 例如:x(3,5):表示第3行第5列的元素

    >> x = rand(6)
    
    x =
    
        0.7655    0.7094    0.1190    0.7513    0.5472    0.8143
        0.7952    0.7547    0.4984    0.2551    0.1386    0.2435
        0.1869    0.2760    0.9597    0.5060    0.1493    0.9293
        0.4898    0.6797    0.3404    0.6991    0.2575    0.3500
        0.4456    0.6551    0.5853    0.8909    0.8407    0.1966
        0.6463    0.1626    0.2238    0.9593    0.2543    0.2511
    
    >> data = x(3,5)
    
    data =
    
        0.1493
    
  • 关键字 end 作为行或列索引来引用最后一个元素。

    >> data = x(end,3)
    
    data =
    
        0.2238
    
    • 您可以将算术运算与关键字 end 结合使用。例如:(y为倒数第二行,倒数第三列的元素)

      y = A(end-1,end-2)
      

5. 提取数组中的多个元素

  • 用作索引时,冒号运算符 (:) 可指代该维度中的所有元素。

    >> density = x(2, :) %x居正中第2行的所有元素
    
    density =
    
        0.7952    0.7547    0.4984    0.2551    0.1386    0.2435
    
  • 冒号运算符可以引用某个值范围。

    >> density = x(1:3,:) %x中第1行-第3行的所有元素
    
    density =
    
        0.7655    0.7094    0.1190    0.7513    0.5472    0.8143
        0.7952    0.7547    0.4984    0.2551    0.1386    0.2435
        0.1869    0.2760    0.9597    0.5060    0.1493    0.9293
    
  • 单个索引值可用于引用向量元素。

    density =
    
        0.7655    0.7094    0.1190    0.7513    0.5472    0.8143
        0.7952    0.7547    0.4984    0.2551    0.1386    0.2435
        0.1869    0.2760    0.9597    0.5060    0.1493    0.9293
    
    >> p = density(8)
    
    p =
    
        0.4984
    
  • 单个索引值范围可用于引用向量元素的子集。

    >> p = density(2:5)
    
    p =
    
        0.7952    0.1869    0.7094    0.7547
    
  • 索引非连续元素

    >> b = [1,3,6] %指针向量
    >> p = density(b)
    
    p =
    
        0.7655    0.1869    0.2760
    

6. 更改数组中的值

  • 可以结合使用索引和赋值来修改变量的元素。

    >> density(1,end) = 0.5
    
    density =
    
        0.7655    0.7094    0.1190    0.7513    0.5472    0.5000
        0.7952    0.7547    0.4984    0.2551    0.1386    0.2435
        0.1869    0.2760    0.9597    0.5060    0.1493    0.9293
    

7. 数组运算

  • 可以将一个标量值与数组中的所有元素相加。

    y = x + 2
    
  • 可以将任意两个大小相同的数组相加。

    z = x + y
    
  • 可以将数组中的所有元素与某个标量相乘或相除。

    z = 2*x
    y = x/3
    
  • 可以使用 max 函数来确定向量的最大值。

    %xMax = max(x)
    
    density =
    
        0.7655    0.7094    0.1190    0.7513    0.5472    0.5000
        0.7952    0.7547    0.4984    0.2551    0.1386    0.2435
        0.1869    0.2760    0.9597    0.5060    0.1493    0.9293
    
    >> max(density)
    
    ans =
    
        0.7952    0.7547    0.9597    0.7513    0.5472    0.9293
    
    
  • 可在单个命令中对整个向量或值数组执行数学运算。

    xSqrt = sqrt(x)
    
  • .* 运算符执行按元素乘法,允许您将两个大小相同的数组的对应元素相乘。

    z = [3 4] .* [10 20]
    
    z = 
        30    80
    

8. 逻辑索引

  • 关系运算符(例如 ><==~=)执行两个值之间的比较。相等或不相等比较的结果为 1 (true) 或 0 (false)。

    >> test = pi < 4
    
    test = 1
    
  • 您可以使用关系运算符将某个向量或矩阵与单个标量值进行比较。结果是与原始数组相同大小的逻辑数组。

    >> [5 10 15] > 12
    
    ans = 
        0    0    1
    
  • 您可以使用逻辑数组作为数组索引,在这种情况下,MATLAB 会提取索引为 true 的数组元素。以下示例将会提取 v1 中大于 6 的所有元素。

    >> v = v1(v1 > 6)
    v =
        6.6678
        9.0698
    
  • 您也可以对两个不同向量使用逻辑索引。以下示例为提取sample中与v1<6的元素的位置相对应的元素

    >> v = sample(v1 > 6)
    v =
        18
        23
    
  • 您可以使用逻辑运算符 and (&) 以及 or (|) 来组合逻辑比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值