不管是tensorflow还是numpy中,都出现了这两个单词!使用上看起来都是改变原始数组/张量的形状,但其内涵是完全不一样的!
总结在先:
- reshape:逻辑上改变矩阵形状,但不会增减任何数据!即:(a,b) → (c,d):ab = cd
- resize:改变矩阵的大小,可以增减数据!即:(a,b) → (c,d):ab ≠ cd
用Numpy来展示:
import numpy as np
# 原始数据:
a = np.array( [[2,3,4,8], [13, 12, 17, 19], [33, 28, 63, 41]] )
a
array([[ 2, 3, 4, 8],
[13, 12, 17, 19],
[33, 28, 63, 41]])
# 用np.reshape()处理:
a1 = np.reshape(a, (2,6))
a1
array([[ 2, 3, 4, 8, 13, 12],
[17, 19, 33, 28, 63, 41]])
# 若ab ≠ cd时:报错!
a11 = np.reshape(a, (3,8))
a11
ValueError: cannot reshape array of size 12 into shape (3,8)
# 用np.resize()处理时:
a2 = np.resize(a, (2,6)) # 数据量一样:同np.reshape!
a2
array([[ 2, 3, 4, 8, 13, 12],
[17, 19, 33, 28, 63, 41]])
----
a3 = np.resize(a, (2,3)) # 数据量可以减少!
a3
array([[ 2, 3, 4],
[ 8, 13, 12]])
---
a4 = np.resize(a, (6, 7)) # 数据量可以增多!
a4
array([[ 2, 3, 4, 8, 13, 12, 17],
[19, 33, 28, 63, 41, 2, 3],
[ 4, 8, 13, 12, 17, 19, 33],
[28, 63, 41, 2, 3, 4, 8],
[13, 12, 17, 19, 33, 28, 63],
[41, 2, 3, 4, 8, 13, 12]])
发现np.resize的变化规律:
- 按照新给的尺寸,从原数组中按照“从左到右、从上到下”的顺序取出并按照同样的顺序往新尺寸里填。一轮全部填完后,再重新来一遍即可。—— 深度学习中常用:所有图片设定统一尺寸(有的删些数据,有的增些数据),图像会有些扭曲变形,但大多数的图像特征还是会保留的!
网友评论