正如我们所看到的,MATLAB 的数组可能是一维或多维的。一维的数组可以形象地看作一系列的数垂直地罗列起来,用一个下标就可以调用数组中的元素(如图
a)。这样的数组适用于一个变量的函数,例如在规定的时间间隔后一系列的测量温度。
许多数据的类型需要多变量的函数。例如,我要在 5
个不同的地方,每个地方测
4 次温度。在这种情况下,我们的
20
次测量结果在逻辑上分为五个不同的行,每行有
4 个测量结果(如图
b
)
.在这种情况下,我们就需要两个下标来调用这个数组特定的函数:第一个下标选择行,第二个下标选择列。这样的数组叫做
二维数组。二维数组中元素的个数取决于这个数组的行数和列数。
出于问题的需要,MATLAB 允许我们创建多维数组。这些数组的每一维对应一个下标,和每一个单个元素都可以通过它的每一个下标被调用。在这个数组中元素的总和取决于每一维中元素的个数。例如,下面两个语句创建了一个 2
×
3
×
2
数组
c
>> c(:,:,1)=[1,2,3;4,5,6];
>> c(:,:,2)=[7,8,9;10,11,12];
>> whos c
Name Size Bytes Class
c 2x3x2 96 double array
Grand total is 12 elements using 96 bytes
这个数组(2
×
3
×
2
)包括
12 种元素,它的内容显示方法和其他数组的显示方法大体相
同
>> c
c(:,:,1) =
1 2 3
4 5 6
c(:,:,2) =
7 8 9
10 11 12
1 多维数组在内存中的存储
一个有 m
行和
n
列的二维数组包括
m
×
n 个元素,这些元素在计算机的内存中将会占有
m
×
n
个连续的内存空间。这些数组的元素在内存中是如何排列的呢?
MATLAB
以
列主
导顺序分配数组中的元素。也就是说,内存先分配第一列的元素,然后第二列,第三列,……以此类推,直到所有列都被分配完。图
2.3
说明
4
×
3
数组
a 的内存分配情况。正如我们所看到的,元素
a(1,2)是其实在内存分配的第五个位置。在下一节我们讨论用单一下标访问数组元素和第八章低级 I/O 接口,内存分配元素的顺序将变得十分重要。这种分配方式也适用于多维数组。数组的第一个下标增长最快,第二个仅次之,依此类推,最后一个变化最慢。例如,在一个 2×2×2 数组中,它的元素在内存中的分配顺序是(1,1,1),(2,1,1),(1,2,1),(2,2,1),(1,1,2),(
2
,
1
,
2
),(
1
,
2
,2),(2
,
2
,
2
)。
2用单个下标访问多标数组
MATLAB 的特性之一就是它允许使用者或程序员把一个多维数看作一个一维数组,这个一维数组的长度等于多维数组的元素数。如果用一个下标访问一个多维数组,那么元素的排列顺序就是内存的分配顺序。
例如,假设我们要声明一个 4
×
3
的数组如下:
>> a=[1 2 3
4 5 6
7 8 9
10 11 12]
a =
1 2 3
4 5 6
7 8 9
10 11 12
那么 a(5)
的值为
5
和
a(1,2)
的值相同,这是因为元素
a(1,2)排在内存第五个位置。在一般情况下,我们不应使用
MATLAB 的这一特性。用单个下标访问多维数组可能会带很多的麻烦。
好的编程习惯
在访问多维数组时,总是使用合适的维数。