MATLAB數(shù)組

2018-08-12 15:14 更新

之前,我們討論了很多關(guān)于MATLAB向量和矩陣的知識,在本章中,我們將討論多維數(shù)組。在MATLAB中所有的數(shù)據(jù)類型的變量是多維數(shù)組,向量是一個一維陣列,矩陣是一個二維數(shù)組。

首先,我們先來看一些特殊類型的數(shù)組。

MATLAB中的特殊陣列

MATLAB中會使用一些函數(shù)來建立一些特殊的陣列,對于所有這些函數(shù),一個參數(shù)創(chuàng)建一個正方形陣列,雙參數(shù)創(chuàng)建矩形陣列。

使用 zeros() 函數(shù)建立一個元素為零的數(shù)組:

例如:

zeros(5)

MATLAB 執(zhí)行上述語句,返回以下結(jié)果:

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() 函數(shù)建立一個數(shù)組:

例如:

ones(4,3)

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

ans =
     1     1     1
     1     1     1
     1     1     1
     1     1     1

使用 eye() 函數(shù)創(chuàng)建一個矩陣:

例如:

eye(4)

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0
     0     0     0     1

使用 rand() 函數(shù)建立一個數(shù)組(0,1)上均勻分布的隨機數(shù):

例如:

rand(3, 5)

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

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

MATLAB幻方

產(chǎn)生相同的總和,當它的元素加入逐行,逐列或?qū)蔷€幻方是一個正方形。

使用 magic() 函數(shù)創(chuàng)建一個幻方陣列,它需要一個單數(shù)的參數(shù),該參數(shù)必須是一個大于或等于3的標量。

例如:

magic(4)

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

ans =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

MATLAB多維數(shù)組

在MATLAB中,一個陣列如果具有兩個以上的維度則被稱為多維數(shù)組。

在MATLAB中的多維數(shù)組是正常的兩維矩陣的延伸。

MATLAB中需要先創(chuàng)建一個二維數(shù)組然后對該二維數(shù)組進行擴展,這樣才能生成一個多維數(shù)組。

例如,我們先建立一個二維數(shù)組a。

a = [7 9 5; 6 1 9; 4 3 2]

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

a =
     7     9     5
     6     1     9
     4     3     2

數(shù)組 a 是一個 3x3 陣列,通過提供的值,我們可以添加一個第三維,例如:

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

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

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() 函數(shù)建立多維數(shù)組。

例如:

b = rand(4,3,2)

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

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() 函數(shù)來建立多維數(shù)組,它結(jié)合沿著指定的維度的數(shù)組列表:

cat() 函數(shù)的語法是:

B = cat(dim, A1, A2...)

注意:

  • B 是新建的數(shù)組;

  • A1, A2, ... 是要連接的陣列;

  • dim 是一起串聯(lián)陣列的維度。

詳細例子

在MATLAB中建立一個腳本文件,輸入下述代碼:

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])

運行該文件時,顯示結(jié)果:

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數(shù)組函數(shù)

MATLAB提供以下功能進行排序,旋轉(zhuǎn),置亂,重塑或移動數(shù)組的內(nèi)容。

函數(shù)目的
length矢量長度或最大陣列尺寸
ndims數(shù)組維數(shù)
numel數(shù)組元素的數(shù)目
size數(shù)組維度
iscolumn確定輸入是否是列向量
isempty確定數(shù)組是否為空
ismatrix確定輸入是否為矩陣
isrow確定輸入是否為行向量
isscalar確定輸入是否為標量
isvector確定輸入是否為矢量
blkdiag從輸入?yún)?shù)構(gòu)造塊對角矩陣
circshift循環(huán)移位
ctranspose復數(shù)共軛轉(zhuǎn)置
diag矩陣的對角矩陣和對角線
flipdim沿指定維度翻轉(zhuǎn)數(shù)組
fliplr從左到右翻轉(zhuǎn)矩陣
flipud將矩陣向下翻轉(zhuǎn)
ipermuten-維陣列的反置換維數(shù)
permute重新排列 N 維數(shù)組的維數(shù)
repmat復制和平鋪數(shù)組
reshape重塑數(shù)組
rot90旋轉(zhuǎn)矩陣90度
shiftdim移位維度
issorted確定集合元素是否按排序順序排列
sort按升序或降序?qū)?shù)組元素進行排序
sortrows按升序?qū)π信判?br>
squeeze刪除單維度
transpose轉(zhuǎn)置
vectorize矢量化表達式

詳細示例

上述的一些函數(shù)將由下列例子說明。

長度,尺寸和數(shù)量的元素:

在MATLAB中建立一個腳本文件,輸入下述代碼:

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

運行該文件,顯示以下結(jié)果:

ans =
     8
ans =
     4
ans =
    23

循環(huán)移位的數(shù)組元素:

在MATLAB中建立一個腳本文件,輸入下述代碼:

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.

運行該文件,顯示以下結(jié)果:

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

MATLAB數(shù)組排序

在MATLAB中建立一個腳本文件,輸入下述代碼:

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

運行該文件,顯示以下結(jié)果:

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

MATLAB單元陣列

單元陣列的陣列中每個單元格可以存儲不同的維度和數(shù)據(jù)類型的數(shù)組的索引單元格。

單元格函數(shù)用于建立一個單元陣列。

單元格函數(shù)的語法如下:

C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)

注意

  • C 是單元陣列;

  • dim 是一個標量整數(shù)或整數(shù)向量,指定單元格陣列C的尺寸;

  • dim1, ... , dimN 是標量整數(shù)指定尺寸的C;

  • obj 是以下內(nèi)容之一

    • Java 數(shù)組或?qū)ο?/p>

    • .NET陣列 System.String 類型或 System.Object

詳細例子

在MATLAB中建立一個腳本文件,輸入下述代碼:

c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}

運行該文件,顯示以下結(jié)果:

c = 
    'Red'    'Blue'    'Green'    'Yellow'    'White'
    [  1]    [   2]    [    3]    [     4]    [    5]

MATLAB在單元格上陣列訪問數(shù)據(jù)

使用兩種方法來引用單元陣列的元素:

  • 封閉的索引在第一個 bracket (),是指一組單元格

  • 封閉的在大括號{},的索引單個單元格內(nèi)的數(shù)據(jù)

括在第一支架的索引,它指的是單元格的集。

單元陣列索引平穩(wěn)括號單元格集合。

例如:

c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

ans = 
    'Red'    'Blue'
    [  1]    [   2]

同樣可以用花括號“{ }”索引訪問單元格的內(nèi)容。

例如:

c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4}

MATLAB執(zhí)行上述語句,返回以下結(jié)果:

ans =
   Blue
ans =
   Green
ans =
   Yellow
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號