Matlab數組
MATLAB中所有數據類型的所有變量都是多維數組。向量是一維數組,矩陣是二維數組。
我們前面已經討論和學習過向量和矩陣。 在本章中,將討論和學習多維數組。 然而,在此之前,讓我們先學習一些特殊類型的數組。
MATLAB中的特殊數組
在本節中,我們將討論學習一些創建一些特殊數組的函數。對於這些函數,單個參數創建一個正方形數組,雙參數創建矩形數組。
zeros()
函數是用來創建一個全零的數組 -
例如 -
zeros(5)
執行上面示例代碼,得到以下結果 -
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()
函數創建一個所有元素爲1
的數組 -
例如 -
ones(4,3)
執行上面示例代碼,得到以下結果 -
Trial>> ones(4,3)
ans =
1 1 1
1 1 1
1 1 1
1 1 1
eye()
函數創建一個單位矩陣。
例如 -
eye(4)
執行上面示例代碼,得到以下結果 -
Trial>> eye(4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
rand()
函數在(0,1)
- 上創建均勻分佈的隨機數的數組 -
例如 -
rand(3, 5)
執行上面示例代碼,得到以下結果 -
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
魔方
魔方是一個平方,它產生相同的和,它的元素被逐行,逐列或者對角線地添加時。
magic()
函數創建一個魔術方陣。這需要一個參數,指定正方形的大小。 參數必須是大於或等於3
的標量。
magic(4)
執行上面示例代碼,得到以下結果 -
Trial>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
多維數組
具有二維以上的數組在MATLAB中被稱爲多維數組。MATLAB中的多維數組是正常二維矩陣的擴展。
通常要生成一個多維數組,首先創建一個二維數組然後再擴展它。
例如,讓我們創建一個二維數組a
。
a = [7 9 5; 6 1 9; 4 3 2]
執行上面示例代碼,得到以下結果 -
Trial>> a = [7 9 5; 6 1 9; 4 3 2]
a =
7 9 5
6 1 9
4 3 2
數組a
是3×3
數組; 可以通過提供以下值來添加第三維:
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
執行上面示例代碼,得到以下結果 -
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()
函數來創建多維數組。
例如,
b = rand(4,3,2)
執行上面示例代碼,得到以下結果 -
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()
函數來構建多維數組。它沿着指定的維度連接數組列表 -
cat()
函數的語法是 -
B = cat(dim, A1, A2...)
其中,
-
B
是創建的新陣列 -
A1
,A2
,...
是要連接的數組 -
dim
是連接數組的大小
例子
創建腳本文件並在其中鍵入以下代碼 -
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])
執行上面示例代碼,得到以下結果 -
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提供以下函數來對數組內容進行排序,旋轉,排列,重新成形或移位。
函數
描述
length
向量的大小或數組的長度
ndims
數組的維數
numel
數組的元素數量
size
數組的維度
iscolumn
確定輸入是否爲列向量
isempty
確定數組是否爲空
ismatrix
確定輸入是否爲矩陣
isrow
確定輸入是否爲行向量
isscalar
確定輸入是否爲標量
isvector
確定輸入是否爲向量
blkdiag
從輸入參數構造塊對角矩陣
circshift
循環移位
ctranspose
複共軛轉置
diag
矩陣對角矩陣和對角線
flipdim
沿着指定的尺寸翻轉數組
fliplr
從左到右翻轉矩陣
flipud
向下翻轉矩陣
ipermute
反轉N-D陣列的置換維度
permute
重新排列N-D數組的維度
repmat
複製和平鋪數組
reshape
重塑數組
rot90
旋轉矩陣90度
shiftdim
移動維度
issorted
確定設置元素是否按排序順序
sort
按升序或降序排列數組元素
sortrows
按升序排列行
squeeze
刪除單例維度
transpose
轉置
vectorize
向量化表達式
例子
以下的例子說明了上面提到的一些函數。
長度,尺寸和元素數量:
創建腳本文件並鍵入以下代碼 -
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
運行文件時,顯示以下結果 -
ans = 8
ans = 4
ans = 23
數組元素的循環移位
創建腳本文件並在其中鍵入以下代碼 -
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.
運行文件文件時,顯示以下結果 -
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
排序數組
創建腳本文件並在其中鍵入以下代碼 -
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
運行文件文件時,顯示以下結果 -
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
單元陣列
單元格陣列是索引單元的數組,其中每個單元格可以存儲不同維度和數據類型的數組。
單元格函數用於創建單元格數組。單元格函數的語法是 -
C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
其中,
-
C
是單元陣列; -
dim
是一個整數或整數向量,它指定單元格數組C
的維數; -
dim1,...,dimN
是指定C
大小的標量整數; obj
是以下之一:- Java數組或對象
- 類型爲
System.String
或System.Object
的.NET數組
示例
創建腳本文件並在其中鍵入以下代碼 -
c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
運行文件時,得到以下結果 -
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
}
訪問單元格數組數據
有兩種方法來引用單元格數組的元素 -
- 將第一個括號
()
中的索引包圍,以引用單元格集 - 將大括號
{}
中的索引括起來,以引用單個單元格內的數據
當將索引包圍在第一個括號中時,它指的是這組單元格。
括號中的單元格數組索引是指單元格集。
例如:
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)
運行文件時,得到以下結果 -
ans =
{
[1,1] = Red
[2,1] = 1
[1,2] = Blue
[2,2] = 2
}
還可以通過用花括號索引來訪問單元格的內容。
例如 -
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4}
運行文件時,得到以下結果 -
ans = Blue
ans = Green
ans = Yellow