位置:首頁 > 高級語言 > Matlab教學 > MATLAB數組

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