数组介绍(Introduction to Arrays)

数组是 MATLAB 中最基本的数据类型。在 MATLAB 中,与许多传统编程语言一样,数组是相同类型多个值的集合。之前介绍的字符串和数字数据类型是数组的特例。

矩阵是一个具有两维的数组。大多数数组具有相同的数据类型;然而,单元格数组(cell array)是一个包含不同数据类型的数组。如果没有为数字指定数据类型,那么默认的数据类型是与 C 语言中的双精度浮点数相当的数据类型,且在相同的架构上具有相同的位数。例如,在 x86 和 PowerPC 架构下,双精度浮点数是 64 位。


声明数组(Declaring Arrays)

行数组和列数组(Row and Column Arrays)

行数组是使用括号内的逗号分隔值创建的:

>> array = [0, 1, 4, 5]
array =
    0     1     4     5

对于简单的行数组,有时可以省略逗号。但是不推荐省略逗号,因为在更大、更复杂的数组中,空格可能会引起歧义。逗号几乎总是表示数组是横向的。

列数组是使用分号 ; 分隔值创建的:

>> column = [1; 2; 3]
column =
    1
    2
    3

声明多维数组(Declaring Multi-Dimensional Arrays)

二维数组(或矩阵)使用逗号分隔列,分号分隔行:

>> matrix = [1, 2, 3; 4, 5, 6]
matrix =
    1     2     3
    4     5     6

简单的矩阵操作是许多线性代数运算的基础。要使用多于两维的数组,可以通过索引扩展矩阵。

在 MATLAB 中声明数组时,所有行和列需要具有相同的大小。如果没有,则会生成错误消息:

>> matrix = [1, 2, 3; 4, 5]
??? Error using ==> vertcat
All rows in the bracketed expression must have the same
number of columns.

数组索引(Indexing Arrays)

数组通过整数索引。要返回简单数组中的单个元素,使用一个整数索引:

>> array = [0, 1, 4, 5];
>> array(3)
ans =
    4

要返回二维数组中的单个元素,使用一个作为行索引的数字和一个作为列索引的数字:

>> matrix = [1, 2, 3; 4, 5, 6];
>> matrix(2, 2)
ans =
   5

要返回多个元素,可以使用数组作为索引:

>> array = [0, 1, 4, 5];
>> array([1 3])
ans =
    0    4

要返回数组的最后一个元素,使用 end

>> array = [0, 1, 4, 5];
>> array(end)
ans =
    5

可以使用冒号 : 返回一系列索引:

>> array = [0, 1, 4, 5];
>> array(2:end)
ans =  
    1     4     5

MATLAB 数组和矩阵的属性(Properties of MATLAB Arrays and Matrices)

与 C 等低级语言不同,MATLAB 中的数组是一种更高级的数据类型:它包含关于数组大小、数据类型等的各种信息。

>> array = [0, 1, 4, 5];
>> length(array)
ans = 4

>> class(array)
ans = double

通过内置的 size 函数,可以知道矩阵的行数和列数。根据标准的数学约定,第一个数字是行数,第二个数字是列数:

>> matrix = [1, 2, 3; 4, 5, 6];
>> size(matrix) 
ans =
    2     3

MATLAB 数组的目标是具有类似数学向量和矩阵的类型。因此,行数组和列数组不完全相同。一维数组实际上是多维数组的特例,并且同样可以使用 size 函数。

>> size(array)
ans =
    1     4

行数组和列数组的大小不同,因此它们不等价:

>> size(column)
ans = 
    3     1

>> size(row) 
ans = 
    1     3

为什么使用数组?(Why Use Arrays?)

使用数组和矩阵的一个主要优点是它可以避免使用循环对数组的多个元素执行相同的操作。例如,假设你想为数组 [1, 2, 3] 中的每个元素加 3。如果 MATLAB 没有使用数组,你将不得不用 FOR 循环来完成这个任务:

>> array = [1, 2, 3];
>> for ii = 1:3
array(ii) = array(ii) + 3;
>> end
>> array
array = [4, 5, 6]

这种方法在 MATLAB 中并不高效,会使程序运行非常慢。相反,你可以创建另一个包含 3 的数组,然后直接将两个数组相加。MATLAB 会自动处理元素:

>> array = [1, 2, 3];
>> arrayofthrees = [3, 3, 3];
>> array = array + arrayofthrees
array = [4, 5, 6];

如果你只需要添加一个常数,还可以省略声明 arrayofthrees,因为 MATLAB 会假设常数会加到数组的所有元素上。这在处理可变大小的数组时非常有用:

>> array = [1, 2, 3];
>> array + 3
ans = [4, 5, 6]

同样的规则适用于标量乘法。

有关 MATLAB 可以对数组执行的操作的更多信息,请参阅数组操作简介。

数组是 MATLAB 的基本原则,几乎所有的 MATLAB 操作都是通过大量使用数组来实现的。要深入了解数组及其操作,请参见数组和矩阵。


Last modified: Tuesday, 15 April 2025, 10:58 AM