【Numpy】中shape和reshape()的用法和区别

参考:

  1. https://blog.csdn.net/weixin_43216017/article/details/87266388
  2. https://blog.csdn.net/u012005313/article/details/49383551?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.channel_param
  3. https://www.cnblogs.com/onemorepoint/p/9099312.html
  • 在Numpy中,shape和reshape()函数很常用。二者的功能都是对于数组的形状进行操作。
  • shape函数可以了解数组的结构
  • reshape()函数可以对数组的结构进行改变

1. shape

import numpy as np
#设置一个数组
a = np.array([1,2,3,4,5,6,7,8])
a.shape   '''结果:(8,)'''
type(a.shape)    '''结果:tuple'''
a.shape[0]    '''结果:8'''
import numpy as np
a = np.array([1,2,3,4,4,3,2,8])  #一维数组
a1 = np.array([[1,2,3,4],[4,3,2,8]])  #二维数组
print(a.shape[0])  #值为8,因为有8个数据
print(a1.shape[0])  #值为2(2行)
print(a1.shape[1])  #值为4(4列)

由上代码可以看出:
一维数组的时候:shape是读取数组的数据个数。
二维数组的时候:shape[0]读取的是矩阵的行数,shape[1]读取的是矩阵的列数。

2. reshape()

在这里插入图片描述

  • 输入参数:
    a:将要被重塑的类数组或数组;
    newshape:整数值或整数元组。新的形状应该兼容于原始形状。如果是一个整数值,表示一个一维数组的长度;如果是元组,一个元素值可以为-1,此时该元素值表示为指定,此时会从数组的长度和剩余的维度中推断出
    order:可选(忽略)
  • 返回:一个新的形状的数组。
a=array([[1,2,3],[4,5,6]])
reshape(a, 6)

在这里插入图片描述

reshape(a, (3, -1)) #为指定的值将被推断出为2

在这里插入图片描述

a = np.array([1,2,3,4,5,6,7,8])
a.reshape(2,4)
'''结果:array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
'''
a.reshape(4,2)
'''结果:
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
'''

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


z.reshape(-1)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])

z.reshape(-1, 1)
# 也就是说,先前我们不知道z的shape属性是多少,但是想让z变成只有1列,行数不知道多少,通过`z.reshape(-1,1)`,Numpy自动计算出有16行,新的数组shape属性为(16, 1),与原来的(4, 4)配套。
 array([[ 1],
        [ 2],
        [ 3],
        [ 4],
        [ 5],
        [ 6],
        [ 7],
        [ 8],
        [ 9],
        [10],
        [11],
        [12],
        [13],
        [14],
        [15],
        [16]])
 
z.reshape(-1, 2)
# newshape等于-1,列数等于2,行数未知,reshape后的shape等于(8, 2)
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10],
       [11, 12],
       [13, 14],
       [15, 16]])
 
# 同理,只给定行数,newshape等于-1,Numpy也可以自动计算出新数组的列数。

reshape()函数可以改变数组的形状,并且原始数据不发生变化

但是,reshape()函数中的参数需要满足乘积等于数组中数据总数。如:当我们将8个数使用(2,3)重新排列时,python会报错。

而且,reshape()函数得出的数组与原数组使用的是同一个存储空间,改变一个,另一个也随之改变
在这里插入图片描述
注意shape和reshape()函数都是对于数组(array)进行操作的,对于list结构是不可以的
在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
shapereshape都是用来改变张量的形状的方法。 shape是一个属性,用来返回一个张量的维度信息,即它有多少行和多少列。它可以帮助我们了解一个张量的形状信息。 reshape是一个函数,用来改变一个张量的形状,即重新组织张量的数据。它接受一个新形状作为参数,可以是一个整数或整数构成的元组。通过reshape,我们可以将一个张量从一种形状转换为另一种形状。 view和reshape都可以用来改变张量的形状,但是它们有一些区别。view只适用于满足连续性条件(contiguous)的张量,而reshape可以用于满足和不满足连续性条件的张量,具有更好的鲁棒性。如果一个张量无法通过view改变形状,可以尝试使用reshape来处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深度学习(PyTorch)——shape、view、reshape用法及其区别](https://blog.csdn.net/qq_42233059/article/details/126656133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python | numpy库 | shape函数与reshape函数](https://blog.csdn.net/qq_52555480/article/details/127757791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [详解numpy.reshape参数newshape出现-1的含义](https://download.csdn.net/download/weixin_38526650/13753950)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值