Matlab 中数组元素引⽤——三种⽅法
1.Matlab 中数组元素引⽤有三种⽅法
注意:在使⽤这三种⽅法之前,⼤家头脑⼀定要清晰的记住,Matlab 中数组元素是按列存储(与Fortran ⼀样),⽐如说下⾯的⼆维数组Matlab 的存储顺序是8,3,4,1,5,9,6,7,2,也就是说先⾏后列,对于3维数组呢,就是先⾏后列再页对应个元素的索引和下标分别为  从上⾯的例⼦中已经很清晰的说明了下标和索引的区别了,也就是说Matlab 为每个元素分配了⼀个唯⼀识别的ID(即index)
2.下标法引⽤
A(ii,jj):其中ii 和jj 可以是⼀维向量、标量、“:”号或者“end”
⼤家对下标估计⽐较熟悉,由于在C 语⾔中接触过,但是我这⾥需要强调的是,Matlab 的下标是可以多⾏多列同时引⽤的,⽽像C 语⾔等⼀次只能引⽤⼀个,⽐如
举⼏个例⼦:1
2
31 .下标法(subscripts)2 .索引法(index)3 .布尔法(Boolean)1
2
3
4A=      8      1      6      3      5      7      4      9      21
2
3
4
5
6
7
8
9
10Element 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 )
1
2
3
4A( 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 列对应的元素
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
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
3.布尔法引⽤
matlab数组赋值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>>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
作者:
出处:
博客⽂章⼤部分为原创,版权归作者和博客园共有,欢迎转载。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。