目錄:
» 矩陣的生成與大小
> 簡單矩陣的生成
> 隨機矩陣的生成
> 矩陣的大小
» 矩陣的索引與訪問
» 矩陣的拼接與裁剪
> 矩陣的拼接
> 矩陣的裁剪
» 矩陣的運算與操作
> 矩陣的算術運算
> 矩陣的翻轉
矩陣的生成與大小
簡單矩陣的生成
A = [1 2; 3 5; 8 5; 4 6] | 空格/逗號表示一列一列,分號/換行表示一行一行 |
B = 1:2:9 | 從1到9,每隔2個取一個整數,即1,3,5,7,9 (2可以是整數/小數) 。2不寫,默認1 |
C = zeros (5,6) | 5*6全0矩陣 |
D = ones(5,6) | 生成5*6的全1矩陣 |
E = linspace (4,12,6) | 生成4~12之間5個等分的數(小數/整數)。6不寫,默認100 |
F = logspace(1,3,5) | 生成5個[10^1 , 10^3]之間的數。5不寫,默認50 |
G = eye(5,6) | 生成5行6列對角線是1,其他是0的矩陣 。 |
隨機矩陣的生成
A = rand(5,6) | 生成[0,1]范圍內的5*6的隨機小數矩陣 |
B= rand | 只產生一個[0,1]范圍內的隨機小數矩陣 |
C=m+(n-m)*rand(a, b) | 在[m,n]范圍內生成a行b列小數矩陣 |
D= randi(m,a) | 生成[1,m]范圍內的a*a整數矩陣 |
E = randi(a) | 生成一個[1,a]之間的整數 |
F = randi([-5,5],10,1) | 生成[-5,5]范圍內的10*1的整數矩陣 |
矩陣大小
d = size(A) | d=x y x是A的行數,y是A的列數 。三維數組也適合 |
[m,n] = size(A) | m是A的行數,n是A的列數 |
d = length(A) | 返回矩陣A維度最大的維度數 |
d = numel(A) | 返回矩陣中元素的總個數,行數 * 列數 |
矩陣的索引與訪問
@注意: 下標從1開始
A(m,n) | 訪問A的m行n列 |
A(m) | 訪問A的某個元素,按列 |
A(m:n) | 訪問A的m~n的數據塊,按列 |
A(m:a:n) | 在m~n的范圍內,每隔a個數訪問,按列 |
A([a,b,c..]) | 直接訪問第a,b,c ..個數據 |
A(a,:) / A(:,a) | a行所有數據 / a列所有數據 |
C = A([1,3],[4,2]) |
取第1行,第三行,第4列,第2列組合的矩陣
並且第4列為第一列
|
C= A(1:3:9,2:3:9) | 取1,4,7行(1~9,每隔3),列也是如此 |
A(:,[a,b]) | 第a列和第b列的所有元素 |
A(a:b,[c,d]) | a~b行和c列d列元素 |
A(find(B)) | A和B是大小相同的矩陣,如果B的當前位置元素為非0,則取A中當前位置的元素 |
d = sub2ind(size(A),m,n) | d的值是A矩陣m行,n列對應的單下標索引 |
[m,n] = ind2sub(size(A),d) | A矩陣單下標d轉換成雙下標的m行,n列 |
矩陣的拼接與裁剪
矩陣拼接
C = cat(標識A,B) |
A和B根據標識組合起來,得到新矩陣C
標識:1-各個矩陣豎着疊在一起(列數必須一樣)
2-各個矩陣橫着連在一起(行數必須一樣)
|
C=vertcat(A,B) | 兩個矩陣豎着疊在一起,相當於cat標識為1的情況 。(列數必須一樣) |
C = horzcat(A,B) | 兩個矩陣橫着連在一起,相當於cat標識為2的情況 。(行數數必須一樣) |
C=repmat(A,3,2) |
矩陣A為一個塊,以塊為基本單位拼成3行個塊,2列個塊的新矩陣 |
C=blkdiag(A,B) | 對角線拼接矩陣 |
C=kron(A,B) | 紅框行數和列數與A相同,每個紅框里面的矩陣行數和列數與B相同,每個紅框矩陣的元素是這個紅框代表的元素(第一個紅框是A中的0元素,第二個紅框是A中的1元素....)*B中所有元素 |
索引擴展 | 以最小的代價把超過索引的點(矩陣外的一個點)包含進來
A =
![]() ![]()
A(2,4)=9, A=
![]() ![]() |
矩陣裁剪
A(1:3,:)=[] | 第1~3行所有列為空,也就是刪除第1~3行 |
矩陣的運算與操作
矩陣算術運算
A' | 矩陣轉置 |
用函數transpose(A)也可以
用 .' 也是可以的
用ctranspose(A)也是可以的
|
inv(A) | A的逆矩陣 | |
A*10 | 矩陣每個元素*10 ,同樣適應於 + - * / | |
A+B 、A-B、 A*B 、A/B、 A\B |
參考數學中兩個矩陣的運算
A/B: A*inv(B)
A\B:inv(A)*B
|
|
A.*B、A./B(A除以B)、A.\B(B除以A) | 兩個矩陣對應位置上的元素進行計算 | |
A.^B、 A.^2、2.^A | 對應位上元素進行計算 | |
trace(A) | 矩陣的跡,等於矩陣對角線元素的和,矩陣的特征值之和 |
矩陣翻轉
flipud(A) |
矩陣 上下翻轉,默認中心軸為中間的那一行
共有偶數行的話直接翻轉,奇數行的話中間一行不動
|
fliplr(A) | 矩陣 左右翻轉 |
rot90(A,k) | A按照逆時針旋轉90*k度,k默認為1 |
reshape(A,a,b) | 把A調整成a行,b列 。 A的大小始終為a*b, 單下標索引調整前后不能變 |
![]() |