numpy使用手册----reshape() 、squeeze()

reshape() 矩阵整理函数:

       reshape()主要用于整理矩阵的形状,在python数据处理领域使用十分频繁。reshape()可以将一个任意形状的矩阵转化我们想要转化的任意形状。(在元素个数满足)的情况下

reshape(self, shape, *shapes, order='C'):

在使用该函数时我们常使用的参数时self ( 原矩阵)  、 shape (目标矩阵行列(height , width)), 同时,对于比较大的矩阵我们还可以设定shape()的行或列其中一个参数为 -1 ,要求函数根据另一个函数自动调整矩阵的另一个参数 ,对于多维转多维的矩阵,可以认为转换过程有两个,将原矩阵转化为 一维矩阵,再将一维矩阵转化为目标维数矩阵。

# 创建一个numpy数据
a = np.array([1 , 2  , 3 , 4  , 5 , 6 ])
# a:
#  [1 2 3 4 5 6]
#np.reshape()
# 将 a 形状整理成两行三列
# 一维数据转化为二维数据
b = a.reshape( ( 2 , 3 ) )
c = np.reshape(a ,( 3 , 2 ))
# 将a转化为一列的二维数组,行自动调整
b1 = a.reshape( ( -1 , 1))
# 二维数据转化为三维数据
d = b.reshape(( 3 , 2 ))
# b:
#  [[1 2 3]
#  [4 5 6]]
# c:
#  [[1 2]
#  [3 4]
#  [5 6]]
# b1:
#  [[1]
#  [2]
#  [3]
#  [4]
#  [5]
#  [6]]
# d:
#  [[1 2]
#  [3 4]
#  [5 6]]

值得注意的是,通过reshape()得到的目标矩阵与原矩阵共用内存,即两个数据指向的内存地址是一样的。

如果改变其中一个,所有指向该地址的变量的值也都将改变。

# 创建一个numpy数据
a = np.array([1 , 2  , 3 , 4  , 5 , 6 ])
b = a.reshape( ( 2 , 3 ) )
# b:
#  [[1 2 3]
#  [4 5 6]]
a[0] = 0
print("b\n" , b)
# b:
#  [[0 2 3]
#  [4 5 6]]

squeeze() 压缩维度函数:

squeeze(self, axis=None):

       squeeze()为压缩维度函数,通俗来讲就是将指定维度然后将与指定维度相同的维度的中括号拿走,例如指定

axis = 1即将所有维度中只有一行一列的矩阵数据的中括号拿走。结合代码

# 创建数据
a = np.array([ [ [1] , [2] , [3] ]])
# 打印维度信息
print(a.shape)         #(1, 3, 1)
b = a.squeeze(axis = 1)         #删除维度为1的维度,.shape() --> ( , 3 , ) n行三列,列数自动调整
print(b)               #[1 2 3]
c = np.array([ [ [1,1] , [2,2] , [3,3] ]])
print(c.shape)         #(1, 3, 2)  #删除维度为1的维度,.shape() --> ( , 3 , 2 ) 三行两列
d = c.squeeze(axis = 1)
print(d)
# [[1 1]
#  [2 2]
#  [3 3]]

猜你喜欢

转载自blog.csdn.net/weixin_38815998/article/details/81503596