MATLAB矩陣的尋訪與賦值

2021-02-19 校苑數模

2.矩陣的尋訪與賦值

在創建了矩陣之後,我們經常需要訪問矩陣中的某一個或者一些元素,另外可能需要對其中的某些元素重新賦值或者刪除某一部分元素。本節介紹如何進行矩陣的尋訪與賦值。

2.1 矩陣的標識

本小節介紹單個元素標識和尋訪的3種方式:全下標、單下標、邏輯1標識。

1.全下標標識

經典數學教科書在引述具體矩陣元素時,通常採用全下標標識法,即指出某一元素是在第幾行第幾列。這種標識方法的優點是:幾何概念清楚,引述簡單。全下標標識法在MATLAB的尋訪和賦值中因為最為直觀,所以它最為常用。

對於二維矩陣來說,全下標標識由兩個下標組成:行下標、列下標。如A(3,5)表示二維矩陣A的第3行第5列。

這裡值得注意的是,MATLAB中對下標的標識是從1開始的,就是和我們平時在數學中使用的說法是一致的。這和其他一些程式語言從0開始標識是不同的。

2.單下標標識

MATLAB儘管是以矩陣作為基本的計算單元,但是矩陣的後臺存儲並不是像顯示出來的那樣成長方形排列的,而是按照單下標標識作為一列存儲到內存中。單下標標識就是「只用一個下標來指明元素在矩陣中的位置」。當然,這樣做首先要對二維矩陣的所有元素進行「一維編號」。所謂「一維編號」就是:先設想把二維矩陣的所有列,按照先左後右的次序首尾相連排成一維長列,然後自上而下對元素位置進行編號。

單下標與全下標的轉換關係:以m´n的二維矩陣A為例,若全下標的元素位置是「第a行,第b列」,那麼相應的單下標則為c=(b-1)*m+a。

在MATLAB中,有兩個函數可以實現全下標和單下標的轉換。

sub2ind:    根據全下標換算出單下標。

ind2sub:    根據單下標換算出全下標。

單下標的優勢是在特定情境下使用更為簡潔,例如編制某些循環的時候只需要一個循環變量就可以了,另外比如需要將某數組賦值給另一維數不同的數組的時候。

3.邏輯1標識

在實際使用中,有時會遇到尋找矩陣中大於或者小於某值的元素的問題,這時就可以使用邏輯1標識法。邏輯1標識用一個基於原矩陣A相對位置的邏輯數組B來對矩陣A進行尋訪。數據B中每一個true值也就是1表示相對位置的A中元素可以被尋訪。如果需要通過邏輯1標識來對矩陣進行尋訪,只需將符合條件的元素位置的標識設置為邏輯1即可。

採用邏輯1標識的程序在速度方面具有一定的優勢。

2.2 矩陣的尋訪

【例2-7】 二維矩陣的尋址。

>> a=[1 2 3; 4 5 6]          %  創建測試矩陣

a =

     1     2    3

     4     5    6

>> A=a(2,2)            %  全下標尋訪

A =

     5

>> b=a(4)              %  單下標尋訪

b =

     5

>> B=a>5                    %  返回邏輯下標

B =

     0     0    0

     0     0    1

>> c=a(B)              %  邏輯下標尋訪

c =

     6

>> d=a(1,:)             %  通過使用冒號可以尋訪全行元素

d =

     1     2    3

>> e=a(:,2)             %  通過使用冒號可以尋訪全列元素

e =

     2

     5

>> f=a(:)               %  單下標尋訪

f =

     1

     4

     2

     5

     3

     6

>> g=a(:,[1 3])              %  尋訪地址可以是向量,以同時尋訪多個元素

g =

     1     3

     4     6

本例中的B=a>5和c=a(B),就是採用邏輯1標識法訪問矩陣a中大於5的元素。

2.3  矩陣的賦值

在了解了矩陣的尋訪方法以後,給矩陣中的特定元素賦值也就成了一個很簡單的事情。下面舉例來說明。

【例2-8】 二維矩陣的賦值。

>> a=magic(4)

a =

    16     2    3    13

     5    11   10     8

     9     7    6    12

     4    14   15     1

>> a(3,4)=0    % 對單個元素進行賦值

a =

    16     2    3    13

     5    11   10     8

     9     7    6     0

     4    14   15     1

>> a(:,1)=1   % 對第一列進行賦值

a =

     1     2    3    13

     1    11   10     8

     1     7    6     0

     1    14   15     1

>> a(14)=16       % 採用全下標對第14個元素進行賦值

a =

     1     2    3    13

     1   11    10     16

     1     7    6     0

     1    14   15    1

2.3.1 進行數組運算的常用函數

在MATLAB中有一些常用函數,這些函數在日常的編程計算過程中會經常遇到,一般是基本的數學概念在MATLAB中的函數表達方式。這些函數在MATLAB中可以同時作用於整個矩陣或者數組,應用起來非常方便,不需要再另寫循環程序來對各元素分別進行計算。掌握這些函數是進一步學習的基礎。MATLAB人性化的地方在於其自帶函數基本是按照相對應的英文名稱縮寫而來,所以便於記憶。

2.3 函數數組運算規則的定義

對於(m´n)的數組

,函數的數組運算規則是指:

也就是說函數的數組運算是指將函數作用於矩陣中的每一個元素,並將最後的結果儲存為與原矩陣行列數相同的矩陣。

2.3.2 進行數組運算的常用函數

本小節列出進行數組運算的常用函數。常用基本數學函數見表2-2,常用三角函數見表2-3,常用適用於向量的函數見表2-4。

表2-2         MATLAB常用的基本數學函數

函    數

說    明

函    數

說    明

abs(x)

純量的絕對值或向量的長度

rat(x)

將實數x化為分數表示

angle(z)

複數z的相角

sign(x)

符號函數 當x<0時,sign(x)=-1; 當x=0時,sign(x)=0;  當x>0時,sign(x)=1

sqrt(x)

開平方

rem(x,y)

求x除以y的餘數

real(z)

複數z的實部

gcd(x,y)

整數x和y的最大公因數

imag(z)

複數z的虛部

lcm(x,y)

整數x和y的最小公倍數

conj(z)

複數z的共軛複數

exp(x)

自然指數

round(x)

四捨五入至最近整數

pow2(x)

2的指數

fix(x)

無論正負,向0的方向取最近整數

log(x)

以e為底的對數,即自然對數

floor(x)

捨去法取最近整數

log2(x)

以2為底的對數

ceil(x)

進一法取最近整數

log10(x)

以10為底的對數

表2-3        MATLAB常用的三角函數

函     數

說     明

函     數

說     明

sin(x)

正弦函數

sinh(x)

超越正弦函數

cos(x)

餘弦函數

cosh(x)

超越餘弦函數

tan(x)

正切函數

tanh(x)

超越正切函數

asin(x)

反正弦函數

asinh(x)

反超越正弦函數

acos(x)

反餘弦函數

acosh(x)

反超越餘弦函數

atan(x)

反正切函數

atanh(x)

反超越正切函數

atan2(x,y)

四象限的反正切函數



表2-4        適用於向量的常用函數

函     數

說     明

函     數

說     明

min(x)

向量x的元素的最小值

norm(x)

向量x的歐氏長度,也就是範數

max(x)

向量x的元素的最大值

sum(x)

向量x的元素總和

mean(x)

向量x的元素的平均值

prod(x)

向量x的元素總乘積

median(x)

向量x的元素的中位數

cumsum(x)

向量x的累計元素總和

std(x)

向量x的元素的標準差

cumprod(x)

向量x的累計元素總乘積

diff(x)

向量x的相鄰元素的差

dot(x, y)

向量x和y的內積

sort(x)

對向量x的元素進行排序

cross(x, y)

向量x和y的外積

【例2-9】  數組運算示例。

>> a=[1 2 4 9;16 25 36 49]

a =

     1     2    4     9

    16    25   36    49

>> b=sqrt(a)                   %  應用函數對矩陣中的每一個元素分別開方

b =

    1.0000    1.4142   2.0000    3.0000

    4.0000    5.0000   6.0000    7.0000

相關焦點

  • MATLAB矩陣及其運算(一)
    1、矩陣的創建matlab矩陣的創建方式有如下幾種:直接輸入、讀取外部數據、內置函數、M文件編程(a) 直接輸入:直接創建矩陣要注意如下規則:矩陣元素必須在方括號[ ]內;矩陣同行元素之間用空格或逗號(,)隔開;矩陣的行與列之間用分號(;)隔開。
  • MATLAB的cell數組
    可以將元胞數組看做一種無所不包的通用矩陣,或者叫做廣義矩陣。組成元胞數組的元素可以是任何一種數據類型的常數或者常量,每一個元素也可以具有不同的尺寸和內存佔用空間,每一個元素的內容也可以完全不同。和一般的數值矩陣一樣,元胞數組的內存空間也是動態分配的。圖3-3是元胞數組的結構示意圖,表示的是一個23的元胞數組。
  • MATLAB簡單粗暴教程(十二)——MATLAB常見錯誤提示
    一是t在使用之前沒有進行賦值或者「定義」(Matlab的變量不需要定義。但是如果在語句賦值的一端出現了未曾出現過的參數,Matlab會認為這是不符合語法的行為)。二是t拼寫錯誤(這種情況經常發生)。三是t如果是函數的話,有可能未在路徑中,致使Matlab無法找到該函數。需要將該函數所在路徑進行添加才可以。
  • matlab矩陣及其運算(五)
    感謝大家對matlab愛好者公眾號的關注!如果公眾號文章對您有幫助,別忘了點擊分享和「在看」哦!
  • matlab vs R
    最大的不同在於賦值問題:matlabRx = 5:10x  <- 5:10matlab 採用等號完成賦值操作,雖然 R 語言支持使用等號完成賦值,但遵循 R 的傳統以及大多數用戶的習慣,我們仍然以 <- 作為變量賦值使用,而等號用於參數的賦值以及創建數據框過程中。
  • 關於Matlab的那些事
    2.matlab的一些特點A.Matlab是一個基於矩陣運算的軟體,這恐怕是眾所周知的事情了,但是,真正在運用的時候(就是在編程的時候),許多人(特別是初學者)往往沒有注意到這個問題,因此,for循環(包括while循環)嵌套了十幾層,這不僅是暴殄天物(沒有發揮matlab所長),還浪費了你寶貴的時間,就只見左下角一直busy。
  • 提高matlab代碼運行速度的一點心得(之三)
    但是,在matlab中,同樣的算法、同樣的結構、同樣的流程,如果採用的語句不一樣,在效率上就會大大不同。所以,我認為,使用matlab比使用其他語言更加困難,也顯得matlab更難以掌握。另外,由於matlab在存儲管理上的不便,使得在同時提高時空兩域的效率變得更加困難,特別是在空間上(因為在時間上matlab提供了profiler這個非常有用的工具,但是在空間上就沒有)。當需要處理大量的數據時,精簡時空兩域的程序語句就尤為重要了。1.
  • MATLAB中,你必須知道的!(二)
    符號運算無須事先的運算對象可以使沒有賦值的符號變量,可以獲得任意精度的解。 1·符號表達式可以代表數字、函數、算子、變量的matlab字符串。 2·建立單個符號量:符號量名 = sym(『符號表達式』)。
  • MATLAB的矩陣運算與重構
    數組運算與矩陣運算在MATLAB中,術語矩陣和數組在一般情況下是沒有區別的。嚴格地說,一個矩陣就是一個二維的數組,是用來進行線性代數運算的。MATLAB運用於矩陣上的數學運算符是以線性代數中的矩陣運算法則來進行計算的,而數組運算是基於兩個矩陣對應元素之間的,所以在MATLAB中,數組運算和矩陣運算是有區別的。
  • 學習matlab的一點心得體會
    A.Matlab是一個基於矩陣運算的軟體,這恐怕是眾所周知的事情了,但是,真正在運用的時候(就是在編程的時候),許多人(特別是初學者)往往沒有注意到這個問題,因此,for循環(包括while循環)嵌套了十幾層,這不僅是暴殄天物(沒有發揮matlab所長),還浪費了你寶貴的時間,就只見左下角一直busy。
  • 【Matlab】hw2
    希望本文能提起大家對matlab的興趣,找到非唯一解。直接寫為下面內容就好了c=[a==b 0];另外,matlab會不推薦你寫min(find)這樣的邏輯結構,Tzvi跟我解釋說。寫min的話,matlab要比較array裡的所有元素,這樣會導致運算減慢。更好的方法是直接取find到的第一個數,這樣它就可以不用比較所有元素,而只是單單找到第一個就好了。
  • 觀點丨關於Matlab的那些事
    2.matlab的一些特點A.Matlab是一個基於矩陣運算的軟體,這恐怕是眾所周知的事情了,但是,真正在運用的時候(就是在編程的時候),許多人(特別是初學者)往往沒有注意到這個問題,因此,for循環(包括while循環)嵌套了十幾層,這不僅是暴殄天物(沒有發揮matlab所長),還浪費了你寶貴的時間,就只見左下角一直busy。
  • 【Matlab】hw3
    比如說,matlab裡面的arrayfun就是一個built-in函數,它的源碼是C語言。這個程序要我們驗證我們輸入的矩陣是不是magic square。這是一個很有趣的矩陣,在matlab裡我們可以通過magic這個函數來獲得這樣的矩陣Example:magic(5)
  • 大牛心得:學習matlab的一點心得體會
    A.Matlab是一個基於矩陣運算的軟體,這恐怕是眾所周知的事情了,但是,真正在運用的時候(就是在編程的時候),許多人(特別是初學者)往往沒有注意到這個問題,因此,for循環(包括while循環)嵌套了十幾層,這不僅是暴殄天物(沒有發揮matlab所長),還浪費了你寶貴的時間,就只見左下角一直busy。
  • MATLAB符號
    當方括號出現在賦值符號"="右側時,表示為一個數組,括號內是數組的所有元素。如果方括號內沒有數就表示為空數組。將數組的部分元素賦值為空數組,即表示刪除了這些元素。同時,方括號內除了數字,也可以是其它已有數組變量,這時,表示將已有的數組變量串聯起來。(注意,數組的維度要能串聯起來,否則會報錯。)
  • Matlab:代數方程求解—solve命令
    點擊上方藍字關注 無距書鄉 獲取即時更新之前在《Matlab:矩陣的秩,簡化梯形矩陣和線性方程組
  • matlab官方快速入門----矩陣和數組
    要創建包含多行的矩陣,請使用分號分隔各行。例如,確認矩陣乘以其逆矩陣可返回單位矩陣:p = a*inv(a)p = 3×3    1.0000         0   -0.0000        0    1.0000         0        0         0    1.0000請注意,p
  • 對矩陣的簡單操作 | MatLab
    2、使用函數zeros(m,n)生成一個元素全為0的m*n的矩陣ones(m,n)生成一個元素全為1的m*n的矩陣eye(n)生成一個n階單位矩陣註:仔細觀察可以發現,當你所使用的函數並不給任何一個變量賦值時,它將會默認為變量ans賦值。
  • MATLAB字符和字符串
    3.1 創建字符串1.一般字符串的創建在MATLAB中,所有的字符串都用兩個單引號括起來,進行輸入賦值。如在MATLAB命令窗口中輸入:>> a='matlab'a =matlab字符串的每個字符(空格也是字符)都是相應矩陣的一個元素,上述變量a是1×6階的矩陣,可以用size(a)命令查得:
  • MATLAB基礎教程-臺大郭彥甫-學習筆記4
    str==『a』 的結果是 11000100,8個indexing,現在它作為str的input ,即str(11000100)=『z』,注意這裡是賦值等號,所以 str中 第一個、第二個,第六個(為1的位置)賦值為Z