Matlab中数组元素引用——三种方法
Matlab中數組元素引用——三種方法
1.Matlab中數組元素引用有三種方法
| 1 2 3 | 1.下標法(subscripts) 2.索引法(index) 3.布爾法(Boolean) |
?
注意:在使用這三種方法之前,大家頭腦一定要清晰的記住,Matlab中數組元素是按列存儲(與Fortran一樣),比如說下面的二維數組
| 1 2 3 4 | A= ?????8?????1?????6 ?????3?????5?????7 ?????4?????9?????2 |
Matlab的存儲順序是8,3,4,1,5,9,6,7,2,也就是說先行后列,對于3維數組呢,就是先行后列再頁對應個元素的索引和下標分別為
| 1 2 3 4 5 6 7 8 9 10 | 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)
2.下標法引用
A(ii,jj):其中ii和jj可以是一維向量、標量、“:”號或者“end”
大家對下標估計比較熟悉,由于在C語言中接觸過,但是我這里需要強調的是,Matlab的下標是可以多行多列同時引用的,而像C語言等一次只能引用一個,比如
| 1 2 3 4 | 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列對應的元素 |
舉幾個例子:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | >>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的矩陣
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | >>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數組轉換為布爾型
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | >>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 |
?
?
?
轉載于:https://www.cnblogs.com/sddai/p/5399464.html
總結
以上是生活随笔為你收集整理的Matlab中数组元素引用——三种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1268 和为K的组合
- 下一篇: Android app内语言环境切换