数组

创建

  • 直接创建:
    1
    2
    3
    >> A=[10,20,30,40] 
    >> B=[10;20;30;40]
    >> C=[1,2;3,4]
  • 借助冒号:
    1
    2
    3
    4
    5
    6
    >> D=[1:2:8] %生成1-8之间以2为步进的数组,如果不指定则默认为1
    D =
    1 3 5 7
    >> D=[1:8]
    D =
    1 2 3 4 5 6 7 8
  • 线性/对数间距向量:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    % 生成线性间距向量:y = linspace(x1,x2,n) 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。如果不指定n,则默认生成50个点。
    >> y1=linspace(1,5,5)
    y1 =
    1 2 3 4 5


    % 生成对数间距向量:y = logspace(a,b,n) 在 10 的幂 10^a 和 10^b(10 的 N 次幂)之间生成 n 个点。如果不指定n,则默认生成50个点。
    >> y2=logspace(0,1,10)
    y2 =
    1.0000 1.2915 1.6681 2.1544 2.7826 3.5938 4.6416 5.9948 7.7426 10.0000
  • 使用特定函数:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    % 生成单位矩阵:I = eye(n,m) 返回一个主对角线元素为 1 且其他位置元素为 0 的 n×m 矩阵。如果不指定m,则默认生成n*n的矩阵。
    >> eye(2,2)
    ans =
    1 0
    0 1
    >> eye(2,3)
    ans =
    1 0 0
    0 1 0

    % 创建全部为1的数组:X = ones(sz1,...,szN) 返回由 1 组成的 sz1×...×szN 数组,其中 sz1,...,szN 指示每个维度的大小。例如,ones(2,3) 返回由 1 组成的 2×3 数组。如果不指定其他参数,例如ones(3)默认生成3*3的数组。
    >> ones(2,3)
    ans =
    1 1 1
    1 1 1

    % 生成均匀分布的随机数:X = rand(sz1,...,szN) 返回由随机数组成的 sz1×...×szN 数组,其中 sz1,...,szN 指示每个维度的大小。例如:rand(3,4) 返回一个 3×4 的矩阵。用法类似ones函数。
    >> rand(2)
    ans =
    0.2785 0.9575
    0.5469 0.9649

    索引

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    >> A=rand(3,4)
    A =
    0.8491 0.7577 0.6555 0.0318
    0.9340 0.7431 0.1712 0.2769
    0.6787 0.3922 0.7060 0.0462

    >> A(4) %请注意,不同于C的二维数组,Matlab中的数组索引按照列进行。
    ans =
    0.7577
    >> A(2,3) %直接指定第二行第三列的元素
    ans =
    0.1712

    >> A(1:3,2:end) %第一到三行,第二到结尾行的元素。
    ans =
    0.7577 0.6555 0.0318
    0.7431 0.1712 0.2769
    0.3922 0.7060 0.0462
    >> A(:,2) %第二列的全部元素
    ans =
    0.7577
    0.7431
    0.3922

    查找

    find函数用于查找非零元素的位置,并返回索引值。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    >> A=magic(4)
    A =
    16 2 3 13
    5 11 10 8
    9 7 6 12
    4 14 15 1
    >> find((A>8)&(A<14)) %查找大于8而小于14的元素的索引值
    ans =
    3
    6
    10
    13
    15
    >> A(find((A>8)&(A<14))) %根据索引值找出对应元素
    ans =
    9
    11
    10
    13
    12

    排序

    sort函数用于对元素进行排序:

    B = sort(A) 按升序对 A 的元素进行排序。

  • 如果 A 是向量,则 sort(A) 对向量元素进行排序。
  • 如果 A 是矩阵,则 sort(A) 会将 A 的列视为向量并对每列进行排序。
  • 如果 A 是多维数组,则 sort(A) 会沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。

B = sort(A,dim) 返回 A 沿维度 dim 的排序元素。例如,如果 A 是一个矩阵,则 sort(A,2) 对每行中的元素进行排序。

B = sort(___,direction) 使用上述任何语法返回按 direction 指定的顺序显示的 A 的有序元素。’ascend’ 表示升序(默认值),’descend’ 表示降序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>> A = [3 6 5; 7 -2 4; 1 0 -9]
A =
3 6 5
7 -2 4
1 0 -9
>> sort(A,1) %按照升序在列上排序
ans =
1 -2 -9
3 0 4
7 6 5
>> sort(A,2) %按照升序在行上排列
ans =
3 5 6
-2 4 7
-9 0 1

>> sort(A,'descend') %按照降序在列上排序
ans =
7 6 5
3 0 4
1 -2 -9

运算

注意 * 与 .* 的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>> A=rand(3)
A =
0.0971 0.3171 0.4387
0.8235 0.9502 0.3816
0.6948 0.0344 0.7655
>> B=ones(3)
B =
1 1 1
1 1 1
1 1 1
>> A.*B
ans =
0.0971 0.3171 0.4387
0.8235 0.9502 0.3816
0.6948 0.0344 0.7655
>> A*B
ans =
0.8530 0.8530 0.8530
2.1552 2.1552 2.1552
1.4948 1.4948 1.4948
>>

数组元素的删除与裁剪

注意删除的时候必须整行或者列删除

1
2
3
4
5
6
7
8
9
10
11
12
>> A=rand(3)
A =
0.7952 0.4456 0.7547
0.1869 0.6463 0.2760
0.4898 0.7094 0.6797
>> A(1,:)=[] %将第一行置空,等效于删除。
A =
0.1869 0.6463 0.2760
0.4898 0.7094 0.6797
>> A=A(1,:) %将第一行裁剪出来,保存为A。
A =
0.1869 0.6463 0.2760