目录

  • 维度介绍
  • shape()
  • reshape()
  • 数组打平为一维数组
  • 二维数组的打平为1行n列
  • 二维数组打平为n行1列
  • reshape中-1参数的含义


维度介绍

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]]])