MATLAB數組
在 MATLAB 中,所有的所有數據類型的變量是多維數組。向量是一個一維陣列,矩陣是一個二維數組。
我們已經討論過的向量和矩陣。在本章中,我們將討論多維數組。然而,在這之前,讓我們討論一些特殊類型的數組。
MATLAB中的特殊陣列
在本節中,我們將討論一些函數來創建一些特殊的陣列。對於所有這些函數,一個參數創建一個正方形陣列,雙參數創建矩形陣列。
zeros() 函數創建一個數組的所有零:
例如:
zeros(5)
MATLAB 將執行上麵的語句,並返回以下結果:
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() 函數創建一個數組,所有的:
例如:
ones(4,3)
MATLAB將執行上麵的語句,並返回以下結果:
ans = 1 1 1 1 1 1 1 1 1 1 1 1
eye() 函數創建一個矩陣。
例如:
eye(4)
MATLAB將執行上麵的語句,並返回以下結果:
ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
rand() 函數創建一個數組(0,1)上均勻分布的隨機數:
例如:
rand(3, 5)
MATLAB將執行上麵的語句,並返回以下結果:
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)
MATLAB將執行上麵的語句,並返回以下結果:
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]
MATLAB將執行上麵的語句,並返回以下結果:
a = 7 9 5 6 1 9 4 3 2
數組a是一個3x3陣列,我們可以添加一個第三維,通過提供的值,如:
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
MATLAB將執行上麵的語句,並返回以下結果:
a(:,:,1) = 7 9 5 6 1 9 4 3 2 a(:,:,2) = 1 2 3 4 5 6 7 8 9
我們也可以使用 ones(), zeros() 或 rand() 函數創建多維數組。
例如,
b = rand(4,3,2)
MATLAB將執行上麵的語句,並返回以下結果:
b(:,:,1) = 0.0344 0.7952 0.6463 0.4387 0.1869 0.7094 0.3816 0.4898 0.7547 0.7655 0.4456 0.2760 b(:,:,2) = 0.6797 0.4984 0.2238 0.6551 0.9597 0.7513 0.1626 0.3404 0.2551 0.1190 0.5853 0.5060
我們也可以使用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 | Length of vector or largest array dimension |
ndims | Number of array dimensions |
numel | Number of array elements |
size | Array dimensions |
iscolumn | Determine whether input is column vector |
isempty | Determine whether array is empty |
ismatrix | Determine whether input is matrix |
isrow | Determine whether input is row vector |
isscalar | Determine whether input is scalar |
isvector | Determine whether input is vector |
blkdiag | Construct block diagonal matrix from input arguments |
circshift | Shift array circularly |
ctranspose | Complex conjugate transpose |
diag | Diagonal matrices and diagonals of matrix |
flipdim | Flip array along specified dimension |
fliplr | Flip matrix left to right |
flipud | Flip matrix up to down |
ipermute | Inverse permute dimensions of N-D array |
permute | Rearrange dimensions of N-D array |
repmat | Replicate and tile array |
reshape | Reshape array |
rot90 | Rotate matrix 90 degrees |
shiftdim | Shift dimensions |
issorted | Determine whether set elements are in sorted order |
sort | Sort array elements in ascending or descending order |
sortrows | Sort rows in ascending order |
squeeze | Remove singleton dimensions |
transpose | Transpose |
vectorize | Vectorize expression |
示例
下麵的例子說明一些上述函數。
長度,尺寸和數量的元素:
創建一個腳本文件,並鍵入下麵的代碼:
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] % horizonal 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數組或對象
-
.NET陣列System.String類型或System.Object
-
例子
創建一個腳本文件,並鍵入下麵的代碼:
c = cell(2, 5); c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
當運行該文件,它會顯示以下結果:
c = 'Red' 'Blue' 'Green' 'Yellow' 'White' [ 1] [ 2] [ 3] [ 4] [ 5]
在單元格上陣列訪問數據
有兩種方法來引用的單元陣列的元素:
-
封閉的索引在第一個 bracket (),是指一組單元格
-
封閉的在大括號{},的索引單個單元格內的數據
括在第一支架的索引,它指的是單元格的集。
單元陣列索引平穩括號單元格集合。
例如:
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; c(1:2,1:2)
MATLAB將執行上麵的語句,並返回以下結果:
ans = 'Red' 'Blue' [ 1] [ 2]
也可以用花括號索引訪問單元格的內容。
例如:
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; c{1, 2:4}
MATLAB將執行上麵的語句,並返回以下結果:
ans = Blue ans = Green ans = Yellow