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 新增第三維 -

a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]

MATLAB 將執行上述語句並返回以下結果 -

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)

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 是建立的新陣列

  • 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 維陣列的維度置換
permute 重新排列 N 維陣列的維度
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

元胞陣列

元胞陣列是由索引單元組成的陣列,每個單元可以儲存不同維度和資料型別的陣列。

cell 函式用於建立元胞陣列。cell 函式的語法為 -

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 = 
{
   [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)

MATLAB 將執行上述語句並返回以下結果 -

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}

MATLAB 將執行上述語句並返回以下結果 -

ans = Blue
ans = Green
ans = Yellow
廣告
© . All rights reserved.