這些都屬於很基礎的內容,建議樓主自己生成壹個矩陣,然後執行這些命令,看結果是怎樣的,好好體會壹下。
(1)A(3,2):提取矩陣的第3行、第2列元素。
(2)A(9):提取矩陣的第9個元素(也就是第3行、第3列)。
(3)A(1:3:10):提取矩陣的第1、4、7、10個元素(也就是第1行)。
(4)A([1,2],[2,3]):提取矩陣的第1~2行、第2~3列的4個元素構成子矩陣。
(5)A(:,[4,3]):提取矩陣的第4、3列元素構成子矩陣。
(6)A([1 1 2],:):提取矩陣的第1、1、2行元素構成子矩陣。
(7)A(A>3):提取矩陣值大於3的元素構成列向量。
(8)A(end:-2:1,:):提取矩陣的第3行和第1行元素構成子矩陣 。
(9)A([1 3 5 2 4]):提取矩陣的第1、3、5、2、4個元素構成子矩陣。
(10)reshape(A,4,3):把矩陣變成4x3的矩陣。
需要說明的幾點:
(1)MATLAB矩陣的元素可以用行、列兩個下標索引,也可以用單個下標索引,此時會把矩陣看成壹個向量。值得註意的是,MATLAB數組是以列序為主序的(和Fortran相同,但不同於C),也就是說,A(2)指的是A(2,1)而不是A(1,2)。第2、3、7、9、10題都涉及這個問題。
(2)第7題的A>3得到結果是邏輯數組,作為下標使用時,表示提取邏輯真的那些位置。
(3)end作為數組下標使用時,表示其所在維的長度,例如,第8題出現在行下標中,就表示3。
(4)數組下標出現單獨的冒號(:)作用等同於1:end,即該維的所有值,例如第5題的冒號表示所有行,第6、8題的冒號表示所有列。
例如:
>>?A=reshape(1:12,[3?4])A?=
1?4?710 2?5?811 3?6?912?>>?A(1:3:10)
ans?=
1?4?710>>?A([1,2],[2,3])
ans?=
4?7 5?8>>?A(:,[4,3])
ans?=
10?7
11?8
12?9
>>?A([1?1?2],:)
ans?=
1?4?710 1?4?710 2?5?811>>?A(A>3)
ans?=
4 5 6 7 8 910
11
12
>>?A(end:-2:1,:)
ans?=
3?6?912 1?4?710>>?A([1?3?5?2?4])
ans?=
1?3?5?2?4>>?reshape(A,4,3)
ans?=
1?5?9 2?610 3?711 4?812