Matlab中数组元素引用.doc
文本预览下载声明
[转载]Matlab中数组元素引用
作者:MyheartVikieMatlab中数组元素引用有三种方法:1.下标法(subscripts)2.索引法(index)3.布尔法(Boolean)在使用这三种方法之前,大家头脑一定要清晰的记住,Matlab中数组元素是按列存储(与Fortran一样),比如说下面的二维数组A=? ???8? ???1? ???6? ???3? ???5? ???7? ???4? ???9? ???2Matlab的存储顺序是8,3,4,1,5,9,6,7,2,也就是说先行后列,对于3维数组呢,就是先行后列再页对应个元素的索引和下标分别为Element Index Subscripts8? ?? ???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)1.下标法引用A(ii,jj):其中ii和jj可以是一维向量、标量、“:”号或者“end”大家对下标估计比较熟悉,由于在C语言中接触过,但是我这里需要强调的是,Matlab的下标是可以多行多列同时引用的,而像C语言等一次只能引用一个,比如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? ???2A(2:3,3:-1:1)ans =? ???7? ???5? ???3? ???2? ???9? ???4A(:,end)ans =? ???6? ???7? ???2A(1,end-1)ans =? ???1A([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? ???42.索引法引用(说白了索引就是存储顺序)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的矩阵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 =? ???6A([1 10 5 2 2 1 3])ans =? ? 17? ? 18? ? 11? ? 23? ? 23? ?
显示全部