#常見矩陣元素索引方法
矩陣作為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...