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