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输出结果是相同的, 可是内在逻辑并不一样.
喜欢记得点赞或者关注哦, 有意见或者建议评论区见~