Matlab的精髓:千錘百煉的矩陣
阿新 • • 發佈:2019-02-18
1.常用矩陣的生成
自定義矩陣的生成:
# 空格/逗號表示列,分號/換行表示行
A = [1 2; 3 5; 8 5; 4 6]
# 從1到9,每隔2個取一個整數,即1,3,5,7,9 (2可以是整數/小數) 。2不寫,預設1
B = 1:2:9
利用一些內建函式生成特定的矩陣:
# 5*6全0矩陣
C = zeros (5,6)
# 生成5*6的全1矩陣
D = ones(5,6)
#生成4~12之間5個等分的數(小數/整數)。6不寫,預設100
E = linspace (4,12,6)
# 生成5個[10^1 , 10^3]之間的數。5不寫,預設50
F = logspace(1,3,5)
# 生成5行6列對角線是1,其他是0的矩陣
G = eye(5,6)
常用隨機矩陣的生成:
# 生成[0,1]範圍內的5*6的隨機小數矩陣
A = rand(5,6)
# 只產生一個[0,1]範圍內的隨機小數矩陣
B= rand
# 在[m,n]範圍內生成a行b列小數矩陣
C=m+(n-m)*rand(a, b)
# 生成[1,m]範圍內的a*a整數矩陣
D= randi(m,a)
# 生成一個[1,a]之間的整數
E = randi(a)
# 生成[-5,5]範圍內的10*1的整數矩陣
F = randi([-5,5],10,1)
提示: 在Matlab中,矩陣是用一對方括號定義
2.矩陣索引
# 訪問A的m行n列
A(m,n)
# 訪問A的某個元素,按列
A(m)
# 訪問A的m~n的資料塊,按列
A(m:n)
# 在m~n的範圍內,每隔a個數訪問,按列
A(m:a:n)
# 直接訪問第a,b,c ..個數據
A([a,b,c..])
# a行所有資料 / a列所有資料
A(a,:) / A(:,a)
# 取第1行,第三行,第4列,第2列組合的矩陣,並且第4列為第一列
C = A([1,3],[4,2])
# 取1,4,7行(1~9,每隔3),列也是如此
C= A(1:3:9,2:3:9)
# 第a列和第b列的所有元素
A(:,[a,b])
# a~b行和c列d列元素
A(a:b,[c,d])
# A和B是大小相同的矩陣,如果B的當前位置元素為非0,則取A中當前位置的元素
A(find(B))
# d的值是A矩陣m行,n列對應的單下標索引
d = sub2ind(size(A),m,n)
# A矩陣單下標d轉換成雙下標的m行,n列
[m,n] = ind2sub(size(A),d)
提示: 在Matlab中,索引下標都是從1開始的,不同於C/C++、java、python等語言中的陣列 。 而且矩陣的排序是按照列優先。
3.矩陣求大小
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) # 返回矩陣中元素的總個數,行數 * 列數
4.矩陣運算
算術運算:
# 矩陣轉置
A'
# A的逆矩陣
inv(A)
# 矩陣每個元素*10 ,同樣適應於 + - * /
A*10
# 矩陣運算,和線性代數中矩陣的運算是一樣的
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)
5.矩陣翻轉
# 矩陣 上下翻轉,預設中心軸為中間的那一行(共有偶數行的話直接翻轉,奇數行的話中間一行不動)
flipud(A)
# 矩陣 左右翻轉
fliplr(A)
# A按照逆時針旋轉90*k度,k預設為1
rot90(A,k)
6.矩陣的拼接
為方便演示,先定義如下矩陣:
A =
1 2 3
4 5 6
B =
7 8 9
10 11 12
13 14 15
C =
16 17
18 19
拼接演示:
# 1 . A和B根據標識組合起來,得到新矩陣C
# (標識: 1-各個矩陣豎著疊在一起(列數必須一樣)
2-各個矩陣橫著連在一起(行數必須一樣)
D = cat(1,A,B)
D =
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
# 2. 兩個矩陣豎著疊在一起,相當於cat標識為1的情況 。(列數必須一樣)
D=vertcat(A,B)
D =
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
# 3. 兩個矩陣橫著連在一起,相當於cat標識為2的情況 。(行數數必須一樣)
D = horzcat(A,C)
D =
1 2 3 16 17
4 5 6 18 19
# 4. 矩陣為一個塊,以塊為基本單位拼成3行個塊,2列個塊的新矩陣
D=repmat(C,3,2)
D =
16 17 16 17
18 19 18 19
16 17 16 17
18 19 18 19
16 17 16 17
18 19 18 19
# 5. 對角線拼接矩陣
D=blkdiag(A,B)
D =
1 2 3 0 0 0
4 5 6 0 0 0
0 0 0 7 8 9
0 0 0 10 11 12
0 0 0 13 14 15
# 6. 詞窮,自己觀察吧,提示,一個大組裡面有6個小組
D=kron(A,C)
D =
16 17 32 34 48 51
18 19 36 38 54 57
64 68 80 85 96 102
72 76 90 95 108 114