MATLAB中的邏輯索引與陣列索引

2021-07-08 19:38:42 字數 3867 閱讀 5189

#常見矩陣元素索引方法

矩陣作為matlab中的基本單位,靈活地實現對其元素的索引是有效處理矩陣的必要基礎。顯然地,matlab也的確提供了很多的矩陣元素索引方法1

2。常見的矩陣元素索引方法分別如下所示:

##邏輯索引

**邏輯索引通過使用元素為0或1的邏輯矩陣來索引矩陣a中的元素,因此它們的維數必須相同。**具體例子如下:

>> a = [1:3;4:6;7:9]

a = 1 2 3

4 5 6

7 8 9

>> threshold = a>5

threshold =

0 0 0

0 0 1

1 1 1

>> a(threshold) = 0

a = 1 2 3

4 5 0

0 0 0

也可以直接寫成如下形式:

>> a = [1:3;4:6;7:9]

a = 1 2 3

4 5 6

7 8 9

>> a(a>5) = 0

a = 1 2 3

4 5 0

0 0 0

##陣列索引

根據參考書籍3

中分類,陣列索引可以劃分為:單下標索引和多下標索引。單下標索引的具體例子如下:

>> a = 1:6

a = 1 2 3 4 5 6

>> a(3) = 5

a = 1 2 5 4 5 6

>> a([2,4])=[4,2]

a = 1 4 5 2 5 6

>> b = [1:3;4:6;7:9]

b = 1 2 3

4 5 6

7 8 9

>> b(:)

ans =14

7258

36

9

matlab中,單個數值可以理解為乙個元素的1×1的矩陣,因此參考文獻2

中所謂的線性索引也不過是陣列索引的一種特例。從上邊的例子可以看出,單下標索引中的冒號索引可以實現多維矩陣的列向量化,這和多下標索引中的冒號索引又不盡相同。

多下標索引的例子具體如下:

>> a = [1:3;4:6;7:9]

a = 1 2 3

4 5 6

7 8 9

>> a(2,2) = 0

a = 1 2 3

4 0 6

7 8 9

>> a([1 3],[2 3])

ans =

2 3

8 9

>> a(:,1)

ans =14

7>> a(:,[1,3])

ans =

1 3

4 6

7 9

>> a(1,:)

ans =

1 2 3

>> a([1,3],:)

ans =

1 2 3

7 8 9

從上邊的例子可以看出,單下標索引和多下標索引的冒號索引的作用是不盡相同的。

綜上所述,matlab中矩陣元素的索引方法分為兩種:邏輯索引和陣列索引。其中,陣列索引又可以分為單下標索引和多下標索引,冒號索引在不同情況下表示的含義亦不盡相同。

#兩者的區別和聯絡

邏輯索引要求索引矩陣必須和矩陣a的維數相同,而陣列索引則沒有這樣的要求。但是陣列索引中的單下標索引,又具有一些和邏輯索引的相同之處,通過下邊的例子來說明:

>> a = [1:3;4:6;7:9]

a = 1 2 3

4 5 6

7 8 9

>> threshold = a>5

threshold =

0 0 0

0 0 1

1 1 1

>> a(threshold)

ans =78

69

>> b = [1:3;4:6;7:9]

b = 1 2 3

4 5 6

7 8 9

>> b(4)

ans =

2>> b([5 7])

ans =

5 3

從上邊的例子可以看出,當對多維矩陣進行單下標索引時,會首先將矩陣b進行列向量化,然後再按順序選出其對應的元素。而邏輯索引也是預設進行列向量化後再按順序選出其對應的元素。

#find函式本質是陣列索引

通過邏輯索引和陣列索引的區別和聯絡,我們將很容易得出find函式本質是陣列索引的結論,具體通過下邊的例子進行說明:

>> a = [1:3;4:6;7:9]

a = 1 2 3

4 5 6

7 8 9

>> threshold = a>5

threshold =

0 0 0

0 0 1

1 1 1

>> a(threshold)

ans =78

69

>> a(threshold) = 0

a = 1 2 3

4 5 0

0 0 0

>> b = [1:3;4:6;7:9]

b = 1 2 3

4 5 6

7 8 9

>> index = find(b>5)

index =36

89

>> b(index) = 0

b = 1 2 3

4 5 0

0 0 0

從上邊的例子可以明顯地看出,矩陣threshold是和矩陣a維數相同的邏輯矩陣,而矩陣index只是記錄了矩陣b列向量化後大於5的元素的索引,且和矩陣b的維數並不相同。

#參考文獻

matlab陣列索引和邏輯索引↩︎

matlab隨手記

↩︎↩︎

張志湧, 楊祖櫻. matlab教程(r2006a-r2007a)[m]. 北京:北京航空航天大學出版社, 2006. 8 ↩︎

matlab中與或非 等邏輯符號

與 或 非 1 a b 1 首先判斷a的邏輯值,然後判斷b的值,然後進行邏輯與的計算。2 a和b可以為矩陣 e.g.a 1 0 b 0 0 2 a b 1 首先判斷a的邏輯值,如果a的值為假,就可以判斷整個表示式的值為假,就不需要再判斷b的值。2 a和b不能是矩陣,只能是標量。與 同理。經典邏輯符號...

元胞陣列索引 MATLAB的cell陣列

5 cell陣列 元胞陣列 cell 是matlab的一種特殊資料型別。可以將元胞陣列看做一種無所不包的通用矩陣,或者叫做廣義矩陣。組成元胞陣列的元素可以是任何一種資料型別的常數或者常量,每乙個元素也可以具有不同的尺寸和記憶體占用空間,每乙個元素的內容也可以完全不同。和一般的數值矩陣一樣,元胞陣列的...

Matlab陣列與矩陣

用logspace 建立一維陣列 1 x logspace a,b 建立行向量x,第乙個元素為10的a次冪,最後乙個為10的b次冪,形成總數50個元素的等比數列。2 x logspace a,b,n 建立行向量,第乙個元素為10的a次冪,最後乙個為10的b次冪,形成總數n個元素的等比數列。用lins...