reshape(-1)函数的理解(代码讲解)

假设z是一个3行4列的矩阵

z = np.array([[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]])

reshape(-1,newshape)的理解

如果reshape的值有-1的话,那么Numpy会根据所给的新的shape的信息(newshape),自动计算补足shape缺的值

比如这里的z矩阵,shape=(3,4),一共有12个元素,如果需要构造2列的新矩阵(只知道新矩阵的列信息),newshape=2,也即是z.reshape(-1,2),那么-1的用处就是根据这个2列这个信息,计算得出新的矩阵需要多少行,12除以2=6(不能整除会报错),那么新的矩阵就是一个6*2的新矩阵;

再举一个例子,还是这个z矩阵,如果需要构造2乘3小矩阵的三维新矩阵(只知道新矩阵的小矩阵的行列信息),newshape=2乘3,也即是z.shape(-1,2,3),那么-1的用处就是根据这个2乘3小矩阵这个信息,计算得出新的三维矩阵需要多少个2乘3的小矩阵,12除以(2乘3)=2,那么新的三维矩阵就是一个2乘2乘3的三维矩阵。(这里三维矩阵的说法有问题,希望理解就OK)

z.shape(-1)

z_1=z.reshape(-1)#改成一串,没有行列
print("z.reshape(-1)的结果:")
print(z_1)
print("结果大小:",z_1.shape)

在这里插入图片描述

z.shape(-1,1)

z_2=z.reshape(-1,1)#不知道几行,改成1列,这里意思是最后一维度是1(最内部的[]包含1个元素)
print("z.shape(-1,1)的结果:")
print(z_2)
print("结果大小:",z_2.shape)

在这里插入图片描述

z.shape(-1,2)

z_3=z.reshape(-1,2)#不知道几行,改成2列,这里意思是最后一维度是2(最内部的[]包含2个元素)
print("z.shape(-1,2)的结果:")
print(z_3)
print("结果大小:",z_3.shape)

在这里插入图片描述

z.shape(-1,5)

在这里插入图片描述

z.shape(-1,2,3)

z_4=z.reshape(-1,2,3)#不知道有几个小矩阵,改成二乘三的小矩阵,这里意思是最后一维度是3(最内部的[]包含3个元素),倒数第二个维度是2
print("z.shape(-1,2,3)的结果:")
print(z_4)
print("结果大小:",z_4.shape)

在这里插入图片描述

z.shape(-1,3,4)

z_5=z.reshape(-1,3,4)#不知道几个小矩阵,改成三乘四的小矩阵
print("z.shape(-1,3,4)的结果:")
print(z_5)
print("结果大小:",z_5.shape)

在这里插入图片描述

z.shape(-1,2,2,3)

z_6=z.reshape(-1,2,2,3)
print("z.shape(-1,2,2,3)的结果:")
print(z_6)
print("结果大小:",z_6.shape)

在这里插入图片描述

小贴士

[[[[ 1  2  3]
   [ 4  5  6]]

  [[ 7  8  9]
   [10 11 12]]]]
结果大小: (1, 2, 2, 3)
对于四维数据的理解,1表示最外部的[]包含1个低一级的[],第一个2表示低一级的[]包含2个更低一级的[],
第二个2表示更低一级的[]包含2个最低级的[],3表示最低级的[]包含3个元素;
这里的1表示的是第一个维度,第一个2表示的是第二个维度,第二个2表示的是第三个维度,3表示的是第4个维度

z1=tf.reshape(z,[-1,1])跟z2=z.reshape(-1,1)作用是一样
但是print(z2)可以打印出结果,print(z1)没有结果
因为tensorflow操作是需要session才能运行的,前期只是搭建框架,设置变量结构
这里的1是指最低级的[]包含1个元素,也就是最后的一个维度的值是1

参考文章:
1 Python中reshape函数参数-1的意思?
2 对np.shape()的一点理解
3 Python中reshape函数参数-1的意思?

个人见解,欢迎批评指正

  • 69
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值