一文弄懂numpy/tensorflow/机器学习中维度信息以及shape和reshape方法

维度介绍

numpy中的ndarray的维度是做机器学习中经常用的,是一个基本以及必须要熟悉掌握的知识点,对于初学者来说很有可能迷惑。原因在于现实生活中所说的维一般而言是几何上的概念,如一维是直线(直线上有无数个点),二维是平面(平面有无数条线),三维为体(有无数个面)。

而在机器学习以及数据分析中的维数是数据空间的一种描述方式,更接近于张量的阶数,如(2,2,3),解读如下:

  • 一般用元组来表示维度信息,其中元组的大小,表达维度的数量,这里为3维。
  • 元组中每个元素的数值代表该维度上的元素数量信息,具体的如下:
    * 第一维有2个子元素,每个子元素为2*3的矩阵
    * 第二维有2个子元素,每个子元素为元素长度为3的数组
    * 第3维有3个子元素,每个子元素,为一个具体的实数

举例如下:

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

第一维元素数为2,元素都是:

[[ 1.,  1.,  1.],[ 1.,  1.,  1.]]

第二维元素数为2,每一个元素都是:

[ 1.,  1.,  1.]

第三维元素数为3,每一个元素都是:

1.

由于ndarray的维度和张量的阶数相似,故tensorflow的张量的维度的理解也是相似的。

shape()

用来查看数组或者矩阵的维数,shape[0]是第一维的维数,shape[1]是第二维的维数。通常来说,第一维和第二维,是行和列。另外的我们可以从外向内数“[]”来进行维度元素的辨别。遇见的第一个“[]”为第一维,里面的元素个数为第一维的元素个数。然后再数第一维任意元素的“[]”,如果没有[],说明是一维,有就是第二维…,以此类推,可以确定第n维以及第n维的元素。,如:

reshape()

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

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

重要的方法:

数组打平为一维数组

  • 将数组变成一维的方法,即在只指定第一维,且第一维的元素个数为数组元素个数的总数reshape(total_num,):

      b=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
      #output:
      array([[ 1,  2,  3,  4],
         [ 4,  5,  6,  7],
         [ 7,  8,  9, 10]])
    
      b.reshape(12,)
      #output
      array([ 1,  2,  3,  4,  4,  5,  6,  7,  7,  8,  9, 10])
    

二维数组的打平为1行n列

  • 二维数组的打平为1行n列的方法:reshape(1,-1)

      b.reshape(1,-1)
      #output,注意跟打平为一维的区别,虽然数据都居中在一个括号内,但是括号的数量是不一样的
      array([[ 1,  2,  3,  4,  4,  5,  6,  7,  7,  8,  9, 10]])
    

二维数组打平为n行1列

  • 二维数组打平为n行1列的方法: reshape(-1,1)

      b.reshape(-1,1)
      #output
      array([[ 1],
         [ 2],
         [ 3],
         [ 4],
         [ 4],
         [ 5],
         [ 6],
         [ 7],
         [ 7],
         [ 8],
         [ 9],
         [10]])
    

reshape中-1参数的含义

  • reshape中-1参数的含义,由于reshape的维数上数字的乘积必须等于元素的个数,而-1表示这一维需要进行元素的个数自行计算:

    b.reshape(2,-1,3)
    #output
    array([[[ 1, 2, 3],
    [ 4, 4, 5]],
    [[ 6, 7, 7],
    [ 8, 9, 10]]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值