0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MATLAB中的矩陣索引

MATLAB ? 來(lái)源:MATLAB ? 2024-09-05 09:28 ? 次閱讀

作者:Steve Eddins 和 Loren Shure,MathWorks

對(duì)矩陣進(jìn)行索引是從矩陣中選擇或修改部分元素的一種方式。MATLAB 有幾種索引樣式,它們不僅功能強(qiáng)大、靈活,而且可讀性強(qiáng)、表現(xiàn)力強(qiáng)。矩陣是 MATLAB 用來(lái)組織和分析數(shù)據(jù)的一個(gè)核心組件,索引是以可理解的方式有效操作矩陣的關(guān)鍵。

對(duì)于 MATLAB 用戶來(lái)說(shuō),索引往往與另一個(gè)術(shù)語(yǔ)密切相關(guān):向量化。向量化意味著使用 MATLAB 矩陣和向量運(yùn)算而不是標(biāo)量運(yùn)算,這通常會(huì)生成更短的代碼,更具數(shù)學(xué)表現(xiàn)力和可讀性,有時(shí)執(zhí)行速度還會(huì)更快。

對(duì)向量進(jìn)行索引

我們從向量和下標(biāo)的簡(jiǎn)單情況開(kāi)始。

 v = [16 5 9 4 2 11 7 14];
下標(biāo)可以是單個(gè)值:
 v(3)     % 提取第三個(gè)元素
  ans =
      9
下標(biāo)本身也可以是另一個(gè)向量。
 v([1 5 6])      % 提取第一個(gè)、第五個(gè)和第六個(gè)元素
  ans =
      16   2   11
MATLAB 中的冒號(hào)表示法提供一種從 v 中提取一系列元素的簡(jiǎn)單方法。
 v(3:7)     % 提取第三個(gè)至第七個(gè)元素
  ans =
      9   4   2   11   7
交換 v 的兩個(gè)“半部分”以創(chuàng)建新向量。
v2 = v([5:8 1:4])     % 提取并交換 v 的兩個(gè)“半部分”
  v2 =
     2   11   7   14   16   5   9   4
特殊的 end 運(yùn)算符是引用 v 的最后一個(gè)元素的簡(jiǎn)便快捷方法。
  v(end)     % 提取最后一個(gè)元素
  ans =
      14
end 運(yùn)算符可用于表示一個(gè)范圍。
  v(5:end)     % 提取第五個(gè)到最后一個(gè)元素
  ans =
      2   11   7   14
您甚至可以使用 end 進(jìn)行算術(shù)運(yùn)算。
  v(2:end-1)     % 提取第二個(gè)到倒數(shù)第二個(gè)元素
  ans =
      5   9   4   2   11   7
將冒號(hào)運(yùn)算符和 end 結(jié)合使用可以實(shí)現(xiàn)多種效果,例如提取每第 k 個(gè)元素或翻轉(zhuǎn)整個(gè)向量。
  v(1end)   % 提取所有奇數(shù)元素
  ans =
      16   9   2   7
  v(end1)   % 反轉(zhuǎn)元素的順序
  ans =
      14   7   11   2   4   9   5   16
通過(guò)使用等號(hào)左側(cè)的索引表達(dá)式,您可以替換向量的某些元素。
  v([2 3 4]) = [10 15 20]   % 替換 v 的某些元素
  v =
    16   10   15   20   2   11   7   14
通常,右側(cè)的元素?cái)?shù)必須與左側(cè)的索引表達(dá)式所引用的元素?cái)?shù)相同。然而,您始終可以在右側(cè)使用標(biāo)量。這稱為標(biāo)量擴(kuò)展。
  v([2 3]) = 30   % 用 30 替換第二個(gè)和第三個(gè)元素
  v =
    16   30   30   20   2   11   7   14

請(qǐng)牢記:MATLAB 使用從 1 開(kāi)始的索引。在對(duì)矩陣進(jìn)行索引時(shí),有些語(yǔ)言使用從 0 開(kāi)始的索引。其他語(yǔ)言,如 MATLAB,使用從 1 開(kāi)始的索引。MATLAB 使用的表示法可能與您在數(shù)學(xué)教科書(shū)中看到的相同。MATLAB 為什么使用從 1 開(kāi)始的索引?MATLAB 創(chuàng)始人 Cleve Moler 對(duì)此解釋道,“這就是數(shù)學(xué)的表示方式?!?/p>

使用兩個(gè)下標(biāo)對(duì)矩陣進(jìn)行索引 現(xiàn)在考慮對(duì)矩陣進(jìn)行索引。我們將在示例中使用幻方。

  A = magic(4)
  A =
          16           2           3          13
           5          11          10           8
           9           7           6          12
           4          14          15           1
通常,對(duì)矩陣進(jìn)行索引需要使用兩個(gè)下標(biāo) - 第一個(gè)下標(biāo)表示行,第二個(gè)下標(biāo)表示列。wKgZombZCSiAMAbKAAEZNGANc-c781.jpg

最簡(jiǎn)單的形式是選擇一個(gè)元素。
  A(2,4)   % 提取第 2 行第 4 列中的元素
  ans =
       8
更常見(jiàn)的是,其中的一個(gè)或兩個(gè)下標(biāo)可以是向量。
  A(2:4,1:2)
  ans =
           5          11
           9           7
           4          14
下標(biāo)位置中的單個(gè)“:”是 1:end 的簡(jiǎn)寫(xiě)表示法,通常用于選擇整行或整列。
  A(3,:)   % 提取第三行
  ans =
     9   7   6   12
  A(:,end)   % 提取最后一列
  ans =
         13
          8
         12
          1

wKgZombZCSiAG8bxAACCuBLkzgE079.jpg

有時(shí)人們對(duì)如何從矩陣中選擇分散的元素感到困惑。例如,假設(shè)您要從 A 中提取元素 (2,1)、(3,2) 和 (4,4)。

wKgZombZCSiAAh4AAACE5Uwqez0301.jpg

矩陣中的分散元素。

我們?nèi)绾伪硎具@種輸出?

表達(dá)式 A([2 3 4], [1 2 4]) 不會(huì)實(shí)現(xiàn)想要的效果。下圖說(shuō)明雙下標(biāo)索引的工作原理。

wKgaombZCSiAReuOAACu7V4O72o330.jpg

從矩陣中提取分散的元素需要不同索引樣式,下一個(gè)主題將講述這方面內(nèi)容。

線性索引

表達(dá)式 A(14) 的作用是什么?

當(dāng)僅使用單下標(biāo)對(duì)矩陣 A 進(jìn)行索引時(shí),MATLAB 會(huì)將 A 視為其元素排列在一個(gè)長(zhǎng)長(zhǎng)的列向量中(對(duì) A 中的列逐列從上到下進(jìn)行索引),如下所示:

16

5

9

...

8

12

1

提示:MATLAB 采用列優(yōu)先 - 線性索引逐列從上到下開(kāi)始進(jìn)行索引。

表達(dá)式 A(14) 只提取隱式列向量的第 14 個(gè)元素。以這種方式對(duì)只使用單下標(biāo)的矩陣進(jìn)行索引通常稱為線性索引。 右圖中每個(gè)矩陣元素的左上角均顯示線性索引。從圖中可以看出,A(14) 等同于 A(2,4)。

wKgaombZCSiAGLiXAACeplTHRwI481.jpg

單下標(biāo)可以是包含多個(gè)線性索引的向量,如在以下示例中:

  A([6 12 15])
  ans =
      11   15   12
再次考慮只提取 A 的元素 (2,1)、(3,2) 和 (4,4)。您可以使用線性索引來(lái)提取這些元素。
  A([2 7 16])
  ans =
      5   7   1
此示例很容易理解,但一般情況下如何計(jì)算線性索引?MATLAB 提供了名為 sub2ind 的函數(shù),用于將行下標(biāo)和列下標(biāo)轉(zhuǎn)換為線性索引。您可以通過(guò)以下方式使用它來(lái)提取所需的元素:
  idx = sub2ind(size(A), [2 3 4], [1 2 4])
  ans =
      2   7   16
  A(idx)
  ans =
      5   7   1

邏輯索引

另一種索引變體是邏輯索引,它是一種緊湊而富有表現(xiàn)力的表示法,適用于包括圖像處理在內(nèi)的許多應(yīng)用。在邏輯索引中,使用單個(gè)邏輯數(shù)組來(lái)表示矩陣下標(biāo)。

您可以使用以下邏輯數(shù)組示例:

 A > 12 
wKgZombZCSiAR1pFAAAEhVNA794840.jpg

這些是矩陣中邏輯表達(dá)式為真的位置,在本例中是任何大于 12 的位置。 表達(dá)式 A(A > 12) 提取對(duì)應(yīng)于邏輯數(shù)組的非零值的矩陣元素。輸出始終以列向量形式出現(xiàn)。
A(A > 12) 


ans =


    16
    14
    15
    13
許多以 is 開(kāi)頭的 MATLAB 函數(shù)返回邏輯數(shù)組,對(duì)于邏輯索引非常有用。例如,通過(guò)在一行代碼中結(jié)合使用 isnan、邏輯索引和標(biāo)量擴(kuò)展,可以將數(shù)組中的所有 NaN 元素替換為另一個(gè)值。
 B(isnan(B)) = 0
MATLAB 有許多返回邏輯數(shù)組的字符串?dāng)?shù)組函數(shù),例如 contains、startsWith 和 matches。您可以使用這些函數(shù)對(duì)使用邏輯索引的文本進(jìn)行操作。例如,您可以提取包含“Skylab”的所有太空計(jì)劃名稱
>> names
wKgZombZCSiAMRDwAAAHL8lR-Xg008.jpg??
>> names(contains(names,"Skylab"))
wKgaombZCSiACkQ2AAAERbYgboY951.jpg

邏輯索引與 find 函數(shù)密切相關(guān)。表達(dá)式 A(A > 5) 等效于 A(find(A > 5))。邏輯索引表達(dá)式在簡(jiǎn)單情況下執(zhí)行速度更快,但如果您需要計(jì)算中的其他項(xiàng)的索引值,則可以使用 find 函數(shù)。例如,假設(shè)您要用零臨時(shí)替換 NaN 值,執(zhí)行一些計(jì)算,然后將 NaN 值放回其原始位置。在此示例中,計(jì)算是使用 filter2 進(jìn)行二維過(guò)濾。您需要使用以下表達(dá)式:
  nan_locations = find(isnan(A)); 


  A(nan_locations) = 0; 


  A = filter2(ones(3,3), A); 


  A(nan_locations) = NaN;
我們希望本文中的這些示例能幫助您了解如何簡(jiǎn)潔高效地表達(dá)算法。在您的 MATLAB 編程中使用這些方法和相關(guān)函數(shù)使您能夠創(chuàng)建簡(jiǎn)潔、可讀和向量化的代碼。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • matlab
    +關(guān)注

    關(guān)注

    179

    文章

    2946

    瀏覽量

    229455
  • 矩陣
    +關(guān)注

    關(guān)注

    0

    文章

    417

    瀏覽量

    34413
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4670

    瀏覽量

    67759

原文標(biāo)題:MATLAB 中的矩陣索引

文章出處:【微信號(hào):MATLAB,微信公眾號(hào):MATLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MATLAB(2)--MATLAB矩陣的表示

    矩陣的建立 利用直接輸入法建立矩陣:將矩陣的元素用括號(hào)括起來(lái),按矩陣的順序輸入各元素,同一行的各元素之間用逗號(hào)或者空格分隔,不同的元素之間
    發(fā)表于 09-06 10:05

    MATLAB(3)--矩陣的引用(sub2ind、ind2sub、reshape函數(shù)使用)

    的序號(hào)為3。 即我們輸入的坐標(biāo)(1,4),(2,5),(3,1)在矩陣A索引號(hào),意思是A矩陣第1行第4個(gè)元素的索引值號(hào)為16,為什么是1
    發(fā)表于 09-06 10:11

    MATLAB(6)--特殊矩陣

    矩陣 對(duì)于向量v=[v1 , v2 ,...,v n ],范德蒙矩陣一般形式為: 在Matlab,函數(shù)vander(V)生成以向量V為基礎(chǔ)的范德蒙
    發(fā)表于 09-06 10:24

    matlab 矩陣運(yùn)算

    matlab 矩陣運(yùn)算矩陣運(yùn)算MATLAB對(duì)矩陣的運(yùn)算包括算術(shù)運(yùn)算,關(guān)系運(yùn)算和邏輯運(yùn)算。算術(shù)矩陣
    發(fā)表于 09-22 15:32

    matlab矩陣特例

    方陣。MATLAB表達(dá)式形式:C=A^n2.2.2.5 點(diǎn)運(yùn)算 MATLAB"."點(diǎn)運(yùn)算指同階矩陣每個(gè)對(duì)應(yīng)元素進(jìn)行的算術(shù)運(yùn)算,標(biāo)量常數(shù)可
    發(fā)表于 09-22 15:34

    MATLAB矩陣操作和矩陣分析命令

    MATLAB矩陣操作和矩陣分析命令矩陣操作 Diag 建立和提取對(duì)角陣 Fliplr 矩陣作左右翻轉(zhuǎn) Flipud
    發(fā)表于 09-22 16:02

    [教程] Matlab矩陣、向量及數(shù)組元素的引用方法和討論

    對(duì)初學(xué)者的有些啟示作用。先說(shuō)說(shuō)數(shù)組、矩陣、方正、行列式、向量的區(qū)別(只是個(gè)人理解,不一定準(zhǔn)確)至于具體的數(shù)學(xué)定義,大家可以到百度百科查看下1.數(shù)組(array):就是我們最熟悉的array,在Matlab
    發(fā)表于 05-07 21:48

    MATLAB矩陣及其數(shù)值運(yùn)算

    MATLAB矩陣及其數(shù)值運(yùn)算 變量和數(shù)據(jù)操作 變量與賦值1.變量命名在MATLAB6.5,變量名是以字母開(kāi)頭,后接字母、數(shù)字或下劃線的字符序列,最多63個(gè)字符。在
    發(fā)表于 05-10 10:16

    matlab矩陣如何索引符合特定條件的元素?

    matlab 如何所以符合特定條件的元素,比如 索引大于1的輸出來(lái)
    發(fā)表于 11-12 10:52

    matlab邏輯函數(shù)

    matlab邏輯函數(shù) all :向量是否所有分量均非零 any :是否有元素非零 exist :指定變量或文件是否存在 find :返回矩陣中非零元素的索引
    發(fā)表于 06-18 14:46 ?1435次閱讀

    matlab輸入矩陣的格式的方法步驟

    Matlab語(yǔ)言的核心是矩陣,其最初的出現(xiàn)和應(yīng)用也是和矩陣息息相關(guān)的,矩陣Matlab的基本
    發(fā)表于 11-15 11:35 ?2.1w次閱讀

    MATLAB教程之經(jīng)典MATLAB矩陣及其運(yùn)算的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是MATLAB教程之經(jīng)典MATLAB矩陣及其運(yùn)算的詳細(xì)資料說(shuō)明包括了:1 變量和數(shù)據(jù)操作,2 MATLAB矩陣
    發(fā)表于 07-11 16:14 ?14次下載

    基于MATLAB的有限域校驗(yàn)矩陣程序下載

    基于MATLAB的有限域校驗(yàn)矩陣程序下載
    發(fā)表于 05-29 11:33 ?9次下載

    剖析TransCAD矩陣索引轉(zhuǎn)換和操作

    在上次發(fā)布的文章,只給出了矩陣索引的原理,并沒(méi)有說(shuō)明相應(yīng)的操作注意事項(xiàng)。為了使新用戶更容易理解創(chuàng)建索引操作,這次重新發(fā)布并補(bǔ)充說(shuō)明矩陣
    的頭像 發(fā)表于 07-28 15:41 ?4940次閱讀

    MATLAB矩陣和數(shù)組操作

    MATLAB矩陣和數(shù)組操作非常方便,下面詳細(xì)介紹一些常用的操作
    的頭像 發(fā)表于 07-05 09:54 ?1322次閱讀