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

數組a3×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是創建的新陣列
  • A1A2...是要連接的數組
  • 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.StringSystem.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