1.Matlab中數組元素引用有三種方法
java
1.下標法(subscripts) 2.索引法(index) 3.布爾法(Boolean)
注意:在使用這三種方法以前,你們頭腦必定要清晰的記住,Matlab中數組元素是按列存儲(與Fortran同樣),好比說下面的二維數組數組
A= 8 1 6 3 5 7 4 9 2
Matlab的存儲順序是8,3,4,1,5,9,6,7,2,也就是說先行後列,對於3維數組呢,就是先行後列再頁對應個元素的索引和下標分別爲函數
Element Index Subscripts 8 1 (1,1) 3 2 (2,1) 4 3 (3,1) 1 4 (1,2) 5 5 (2,2) 9 6 (3,2) 6 7 (1,3) 7 8 (2,3) 2 9 (3,3)
從上面的例子中已經很清晰的說明了下標和索引的區別了,也就是說Matlab爲每一個元素分配了一個惟一識別的ID(即index)spa
2.下標法引用
A(ii,jj):其中ii和jj能夠是一維向量、標量、「:」號或者「end」
你們對下標估計比較熟悉,因爲在C語言中接觸過,可是我這裏須要強調的是,Matlab的下標是能夠多行多列同時引用的,而像C語言等一次只能引用一個,好比
blog
A(2:3,3:-1:1)表示引用數組中的2~3行,3~1列對應的元素 A(:,end)表示引用最後一列元素,「:」表示全部列或行,「end」表示最後一列或列,「end-n」表示倒數第n行或列 A(1,end-1)表示引用第1行倒數第2個元素 A([2 1 3 3],[1 1 2 2 1])表示引用按兩個向量引用指定的元素,即A中的第2,1,3,3行和第1,1,2,2,1列對應的元素
舉幾個例子:索引
>>A=magic(3) A = 8 1 6 3 5 7 4 9 2 >>A(2:3,3:-1:1) ans = 7 5 3 2 9 4 >>A(:,end) ans = 6 7 2 >>A(1,end-1) ans = 1 >>A([2 1 3 3],[1 1 2 2 1]) ans = 3 3 5 5 3 8 8 1 1 8 4 4 9 9 4 4 4 9 9 4
2.索引法引用(說白了索引就是存儲順序)
A(index):index能夠是任意的數組,index的元素必須是正整數,且不大於numel(A),返回的是一個尺寸與index同樣的數組
下標和索引之間能夠經過ind2sub和sub2ind函數相互轉換,具體能夠看幫助,很簡單
[I,J] = ind2sub(siz,IND)
IND = sub2ind(siz,I,J)
還有使用A(:)就能夠將數組A轉換爲列向量
A(8):表示引用A的第8個元素
B=A([1 10 5 2 2 1 3]):表示依次引用A的第1,10,5,2,2,1,3個元素,返回與index尺寸相同的數組,也就是說size(B)=size(index)
A([2 5 9;1 1 1;8 5 6]):返回的時侯是一個3*3的矩陣
ip
>>A=magic(5)%括號中爲索引值 A = 17 (1) 24 (6) 1 (11) 8 (16) 15 (21) 23 (2) 5 (7) 7 (12) 14 (17) 16 (22) 4 (3) 6 (8) 13 (13) 20 (18) 22 (23) 10 (4) 12 (9) 19 (14) 21 (19) 3 (24) 11 (5) 18 (10) 25 (15) 2 (20) 9 (25) >>A(8) ans = 6 >>A([1 10 5 2 2 1 3]) ans = 17 18 11 23 23 17 4 >>A([2 5 9;1 1 1;8 5 6]) ans = 23 11 12 17 17 17 6 11 24
3.布爾法引用
A(X):X是一個有0和1組成布爾型數據,且size(A)=size(X),對應位置爲1則留下該數據,0則去掉,最後按A中的存儲順序,返回一個列向量
假如說A是3*3的數組
A(logical([1 0 0;0 1 0;0 0 1])):表示引用了數組A的對角線元素,注意必須使用logical將0/1數組轉換爲布爾型
class
>>A=magic(3)%生成一個3*3的數組 A= 8 1 6 3 5 7 4 9 2 >>x=logical([1 1 0;0 1 1;1 0 1])%將double轉化爲boolean型數據 x = 1 1 0 0 1 1 1 0 1 >>A(x)%引用對應位置爲1的數據,返回列向量 ans = 8 4 1 5 7 2 >>x=A>5%是有了比較語句,返回布爾型數據,對應位置數據大於5的爲1,不然爲0 x = 1 0 1 0 0 1 0 1 0 >>A(x)%返回大於A中大於5的元素,其實該命令能夠一次性執行A(A>5)或者find(A>5),前者返回具體元素,後者返回大於5的數據的索引值 ans = 8 9 6 7 >>A(A>5)%一次性執行上面的命令 ans = 8 9 6 7 >>indx=find(A>5)%查找A中對於5的元素,返回它們的索引(index)值,此時咱們能夠經過A(index)返回具體的元素 index = 1 6 7 8