目录
- 前言
- im2col
- col2im
- 最后
前言
Matlab矩阵处理的函数真的是太多了, 这里来看两个矩阵重排的函数im2col与col2im.
im2col
这里有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') 是等价的. 所以先从它开始说吧:
B = im2col(A, [m n], 'sliding')
代码语言:javascript复制A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
B = im2col(A, [2 2])
代码语言:javascript复制输出如下:
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中的每一个列都是子矩阵.
B = im2col(A, [m n], 'distinct')
这个和sliding最大的差别就是子矩阵不重叠. 整体生成方式没有太大变化.
col2im
col2im就是im2col的逆过程. col2im有3中形式, 如下:
- 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') 是一个效果.
A = col2im(B, [m n], [M N], 'sliding')
代码语言:javascript复制代码如下:
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')
代码语言:javascript复制输出如下:
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的作用就是按照给的尺寸重排矩阵.
A = col2im(B, [m n], [M N], 'distinct')
代码语言:javascript复制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')
代码语言:javascript复制输出如下:
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输出结果是相同的, 但是内在逻辑并不同.
最后
喜欢记得点赞或者关注哦, 有意见或者建议评论区见~