MATLAB中所有數(shù)據(jù)類型的所有變量都是多維數(shù)組。向量是一維數(shù)組,矩陣是二維數(shù)組。
我們前面已經(jīng)討論和學(xué)習(xí)過(guò)向量和矩陣。 在本章中,將討論和學(xué)習(xí)多維數(shù)組。 然而,在此之前,讓我們先學(xué)習(xí)一些特殊類型的數(shù)組。
在本節(jié)中,我們將討論學(xué)習(xí)一些創(chuàng)建一些特殊數(shù)組的函數(shù)。對(duì)于這些函數(shù),單個(gè)參數(shù)創(chuàng)建一個(gè)正方形數(shù)組,雙參數(shù)創(chuàng)建矩形數(shù)組。
zeros()
函數(shù)是用來(lái)創(chuàng)建一個(gè)全零的數(shù)組 -
例如 -
zeros(5)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> zeros(5)
ans =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
ones()
函數(shù)創(chuàng)建一個(gè)所有元素為1
的數(shù)組 -
例如 -
ones(4,3)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> ones(4,3)
ans =
1 1 1
1 1 1
1 1 1
1 1 1
eye()
函數(shù)創(chuàng)建一個(gè)單位矩陣。
例如 -
eye(4)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> eye(4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
rand()
函數(shù)在(0,1)
- 上創(chuàng)建均勻分布的隨機(jī)數(shù)的數(shù)組 -
例如 -
rand(3, 5)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> rand(3, 5)
ans =
0.8147 0.9134 0.2785 0.9649 0.9572
0.9058 0.6324 0.5469 0.1576 0.4854
0.1270 0.0975 0.9575 0.9706 0.8003
魔方是一個(gè)平方,它產(chǎn)生相同的和,它的元素被逐行,逐列或者對(duì)角線地添加時(shí)。
magic()
函數(shù)創(chuàng)建一個(gè)魔術(shù)方陣。這需要一個(gè)參數(shù),指定正方形的大小。 參數(shù)必須是大于或等于3
的標(biāo)量。
magic(4)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
具有二維以上的數(shù)組在MATLAB中被稱為多維數(shù)組。MATLAB中的多維數(shù)組是正常二維矩陣的擴(kuò)展。
通常要生成一個(gè)多維數(shù)組,首先創(chuàng)建一個(gè)二維數(shù)組然后再擴(kuò)展它。
例如,讓我們創(chuàng)建一個(gè)二維數(shù)組a
。
a = [7 9 5; 6 1 9; 4 3 2]
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> a = [7 9 5; 6 1 9; 4 3 2]
a =
7 9 5
6 1 9
4 3 2
數(shù)組a
是3×3
數(shù)組; 可以通過(guò)提供以下值來(lái)添加第三維:
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
執(zhí)行上面示例代碼,得到以下結(jié)果 -
a =
ans(:,:,1) =
0 0 0
0 0 0
0 0 0
ans(:,:,2) =
1 2 3
4 5 6
7 8 9
還可以使用ones()
,zeros()
或rand()
函數(shù)來(lái)創(chuàng)建多維數(shù)組。
例如,
b = rand(4,3,2)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> b = rand(4,3,2)
b(:,:,1) =
0.1419 0.9595 0.9340
0.4218 0.6557 0.6787
0.9157 0.0357 0.7577
0.7922 0.8491 0.7431
b(:,:,2) =
0.3922 0.0318 0.8235
0.6555 0.2769 0.6948
0.1712 0.0462 0.3171
0.7060 0.0971 0.9502
也可以使用cat()
函數(shù)來(lái)構(gòu)建多維數(shù)組。它沿著指定的維度連接數(shù)組列表 -
cat()
函數(shù)的語(yǔ)法是 -
B = cat(dim, A1, A2...)
其中,
B
是創(chuàng)建的新陣列A1
,A2
,...
是要連接的數(shù)組dim
是連接數(shù)組的大小例子
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
a = [9 8 7; 6 5 4; 3 2 1];
b = [1 2 3; 4 5 6; 7 8 9];
c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0])
執(zhí)行上面示例代碼,得到以下結(jié)果 -
c(:,:,1) =
9 8 7
6 5 4
3 2 1
c(:,:,2) =
1 2 3
4 5 6
7 8 9
c(:,:,3) =
2 3 1
4 7 8
3 9 0
MATLAB提供以下函數(shù)來(lái)對(duì)數(shù)組內(nèi)容進(jìn)行排序,旋轉(zhuǎn),排列,重新成形或移位。
函數(shù) | 描述 |
---|---|
length |
向量的大小或數(shù)組的長(zhǎng)度 |
ndims |
數(shù)組的維數(shù) |
numel |
數(shù)組的元素?cái)?shù)量 |
size |
數(shù)組的維度 |
iscolumn |
確定輸入是否為列向量 |
isempty |
確定數(shù)組是否為空 |
ismatrix |
確定輸入是否為矩陣 |
isrow |
確定輸入是否為行向量 |
isscalar |
確定輸入是否為標(biāo)量 |
isvector |
確定輸入是否為向量 |
blkdiag |
從輸入?yún)?shù)構(gòu)造塊對(duì)角矩陣 |
circshift |
循環(huán)移位 |
ctranspose |
復(fù)共軛轉(zhuǎn)置 |
diag |
矩陣對(duì)角矩陣和對(duì)角線 |
flipdim |
沿著指定的尺寸翻轉(zhuǎn)數(shù)組 |
fliplr |
從左到右翻轉(zhuǎn)矩陣 |
flipud |
向下翻轉(zhuǎn)矩陣 |
ipermute |
反轉(zhuǎn)N-D陣列的置換維度 |
permute |
重新排列N-D數(shù)組的維度 |
repmat |
復(fù)制和平鋪數(shù)組 |
reshape |
重塑數(shù)組 |
rot90 |
旋轉(zhuǎn)矩陣90度 |
shiftdim |
移動(dòng)維度 |
issorted |
確定設(shè)置元素是否按排序順序 |
sort |
按升序或降序排列數(shù)組元素 |
sortrows |
按升序排列行 |
squeeze |
刪除單例維度 |
transpose |
轉(zhuǎn)置 |
vectorize |
向量化表達(dá)式 |
以下的例子說(shuō)明了上面提到的一些函數(shù)。
長(zhǎng)度,尺寸和元素?cái)?shù)量:
創(chuàng)建腳本文件并鍵入以下代碼 -
x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9];
length(x) % length of x vector
y = rand(3, 4, 5, 2);
ndims(y) % no of dimensions in array y
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s) % no of elements in s
運(yùn)行文件時(shí),顯示以下結(jié)果 -
ans = 8
ans = 4
ans = 23
數(shù)組元素的循環(huán)移位
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
a = [1 2 3; 4 5 6; 7 8 9] % the original array a
b = circshift(a,1) % circular shift first dimension values down by 1.
c = circshift(a,[1 -1]) % circular shift first dimension values % down by 1
% and second dimension values to the left % by 1.
運(yùn)行文件文件時(shí),顯示以下結(jié)果 -
a =
1 2 3
4 5 6
7 8 9
b =
7 8 9
1 2 3
4 5 6
c =
8 9 7
2 3 1
5 6 4
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
v = [ 23 45 12 9 5 0 19 17] % horizontal vector
sort(v) % sorting v
m = [2 6 4; 5 3 9; 2 0 1] % two dimensional array
sort(m, 1) % sorting m along the row
sort(m, 2) % sorting m along the column
運(yùn)行文件文件時(shí),顯示以下結(jié)果 -
v =
23 45 12 9 5 0 19 17
ans =
0 5 9 12 17 19 23 45
m =
2 6 4
5 3 9
2 0 1
ans =
2 0 1
2 3 4
5 6 9
ans =
2 4 6
3 5 9
0 1 2
單元格陣列是索引單元的數(shù)組,其中每個(gè)單元格可以存儲(chǔ)不同維度和數(shù)據(jù)類型的數(shù)組。
單元格函數(shù)用于創(chuàng)建單元格數(shù)組。單元格函數(shù)的語(yǔ)法是 -
C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
其中,
C
是單元陣列;dim
是一個(gè)整數(shù)或整數(shù)向量,它指定單元格數(shù)組C
的維數(shù);dim1,...,dimN
是指定C
大小的標(biāo)量整數(shù);obj
是以下之一:System.String
或System.Object
的.NET數(shù)組示例
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
運(yùn)行文件時(shí),得到以下結(jié)果 -
c =
{
[1,1] = Red
[2,1] = 1
[1,2] = Blue
[2,2] = 2
[1,3] = Green
[2,3] = 3
[1,4] = Yellow
[2,4] = 4
[1,5] = White
[2,5] = 5
}
有兩種方法來(lái)引用單元格數(shù)組的元素 -
()
中的索引包圍,以引用單元格集{}
中的索引括起來(lái),以引用單個(gè)單元格內(nèi)的數(shù)據(jù)當(dāng)將索引包圍在第一個(gè)括號(hào)中時(shí),它指的是這組單元格。
括號(hào)中的單元格數(shù)組索引是指單元格集。
例如:
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)
運(yùn)行文件時(shí),得到以下結(jié)果 -
ans =
{
[1,1] = Red
[2,1] = 1
[1,2] = Blue
[2,2] = 2
}
還可以通過(guò)用花括號(hào)索引來(lái)訪問(wèn)單元格的內(nèi)容。
例如 -
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4}
運(yùn)行文件時(shí),得到以下結(jié)果 -
ans = Blue
ans = Green
ans = Yellow