阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

浅谈Numpy中的shape、reshape函数的区别

75次阅读
没有评论

共计 1813 个字符,预计需要花费 5 分钟才能阅读完成。

导读 本文主要介绍了 Numpy 中的 shape、reshape 函数的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

[/yiji]1 shape()函数[/yiji]
读取矩阵的长度,比如 shape[0]就是读取矩阵第一维度的长度, 相当于行数。它的输入参数可以是一个整数表示维度,也可以是一个矩阵。shape 函数返回的是一个元组 tuple,表示数组(矩阵)的维度 / 形状,例子如下:

  • w.shape[0]返回的是 w 的行数
  • w.shape[1]返回的是 w 的列数
  • df.shape():查看行数和列数
  • 1. 数组(矩阵)只有一个维度时,shape 只有 shape[0],返回的是该一维数组(矩阵)中元素的个数,通俗点说就是返回列数,因为一维数组只有一行,一维情况中 array 创建的可以看做 list(或一维数组),创建时用()和 [] 都可以,多维就使用[]

    >>> a=np.array([1,2])
    >>> a
    array([1, 2])
    >>> a.shape
    (2L,)
    >>> a.shape[0]
    2L
    >>> a.shape[1]
    IndexError: tuple index out of range   #最后报错是因为一维数组只有一个维度,可以用 a.shape 或 a.shape[0]来访问
      
    #这个使用的是两个()包裹,得到的数组和前面的一样
    >>> a=np.array((1,2))
    >>> a
    array([1, 2])

    2. 数组有两个维度(即行和列)时,a.shape 返回的元组表示该数组的行数与列数

    # 注意二维数组要用()和 [] 一起包裹起来,键入 print a 会得到一个用 2 个 [] 包裹的数组(矩阵)>>> b=np.array([[1,2,3],[4,5,6]])
    >>> b
    array([[1, 2, 3],
           [4, 5, 6]])
    >>> b.shape
    (2L, 3L)

    总结: 使用 np.array()创建数组时,

    一维的可以直接 np.array([1,2,3])或者 np.array((1,2,3))

    二维的要使用 np.array([[1,2,3],[1,2,3]]), 用一个()和一个 [] 把要输入的 list 包裹起来

    三维的要使用 np.array([[[1,2,3],[1,2,3]]]), 用一个()和两个 [] 把要输入的 list 包裹起来

    >>> a=np.array([[[1,2],[3,4]]])
    >>> a
    array([[[1, 2],
            [3, 4]]])
    >>> a.shape
    (1L, 2L, 2L)

    返回的元组表示 3 个维度各包含的元素的个数。所谓元素,在一维时就是元素的个数,二维时表示行数和列数,三维时 a.shape【0】表示创建的块数,a.shape【1】和 a.shape【2】表示每一块(每一块都是二维的)的行数和列数。

    >>> a=np.ones([2,2,3])# 创建两个 2 行 3 列的数组(矩阵)>>> a
    array([[[1.,  1.,  1.],
            [1.,  1.,  1.]],
      
           [[1.,  1.,  1.],
            [1.,  1.,  1.]]])
    2 reshape()函数

    改变数组的形状,并且原始数据不发生变化。但是,reshape()函数中的参数需要满足乘积等于数组中数据总数.

    如:当我们将 8 个数使用 (2,3) 重新排列时,python 会报错

    import numpy as np
      
    a=np.array([1,2,3,4])
    b=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,1]])
    print("a:\n",a)
    print("b:\n",b)
    print(b.dtype)
      
    a_r=a.reshape((2,2))  
    print("a_r:\n",a_r)
    d=a.reshape((-1,1))
    print("d:\n",d)
    e=a.reshape((1,-1))
    print("e:\n",e)
    #结果如下
    a:
     [1 2 3 4]
    c:
     [[1 2 3 4]
     [4 5 6 7]
     [7 8 9 1]]
    int32
      
    a_r:
     [[1 2]
     [3 4]]
    d:
     [[1]
     [2]
     [3]
     [4]]
    e:
     [[1 2 3 4]]

    而且,reshape()函数得出的数组与原数组使用的是同一个存储空间,改变一个,另一个也随之改变。
    浅谈 Numpy 中的 shape、reshape 函数的区别

    【注意】shape 和 reshape()函数都是对于数组 (array) 进行操作的,对于 list 结构是不可以的
    浅谈 Numpy 中的 shape、reshape 函数的区别

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1813字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中