Matlab矩陣處理的函數真的是太多了, 這裏來看兩個矩陣重排的函數im2col與col2im.bash
這裏有3種形式, 以下:函數
- B = im2col(A, [m n])
- B = im2col(A, [m n], 'sliding')
- B = im2col(A, [m n], 'distinct')
B = im2col(A, [m n]) 和 B = im2col(A, [m n], 'sliding') 是等價的. 因此先從它開始說吧:spa
A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
B = im2col(A, [2 2])
複製代碼
輸出以下:code
A =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
B =
1 5 9 2 6 10 3 7 11
5 9 13 6 10 14 7 11 15
2 6 10 3 7 11 4 8 12
6 10 14 7 11 15 8 12 16
複製代碼
簡單來講, 就是以步長爲1進行滑動生成子矩陣, 子矩陣大小爲[m n]. 因此B中的每個列都是子矩陣.cdn
這個和sliding最大的差異就是子矩陣不重疊. 總體生成方式沒有太大變化.blog
col2im就是im2col的逆過程. col2im有3中形式, 以下:string
- A = col2im(B, [m n], [M N])
- A = col2im(B, [m n], [M N], 'sliding')
- A = col2im(B, [m n], [M N], 'distinct')
仍是和im2col類似, A = col2im(B, [m n], [M N]) 和 A = col2im(B, [m n], [M N], 'sliding') 是一個效果.it
代碼以下:io
B = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = col2im(B, [1 1], [2, 8], 'sliding')
複製代碼
輸出以下:class
B =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
A =
1 9 2 10 3 11 4 12
5 13 6 14 7 15 8 16
複製代碼
能夠看到, 依舊是豎着進行滑動, col2im的做用就是按照給的尺寸重排矩陣.
B = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = col2im(A, [2 2], [2 8], 'distinct')
複製代碼
輸出以下:
B =
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
A =
1 9 2 10 3 11 4 12
5 13 6 14 7 15 8 16
複製代碼
能夠看到sliding輸出結果是相同的, 可是內在邏輯並不一樣.
喜歡記得點贊或者關注哦, 有意見或者建議評論區見~