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

上一篇: Matlab矩陣 下一篇: Matlab冒號符號