Python数据分析系列之Numpy常用操作第五篇

148 阅读2分钟

这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战
在进行数据处理中,总会需要对多维数据的形状大小进行调整,比如把一个2行3列的数组调整为3行2列的数组以满足计算要求。Numpy提供了非常丰富好用且简单的操作方法:

  1. ravel:把多维数组扁平化为一维数组;
  2. reshape: 把数组调整为指定行列的数组;
  3. T: 把数组进行矩阵转置
  4. resize:会就地修改原数组并没有返回新数组
  5. np.vstack:将不同数组按垂直方向进行合并堆叠的功能
  6. np.hstack:将不同数组按水平方向进行合并堆叠的功能

改变Numpy数组的形状,例如从多维数组扁平为一维数组,Numpy提供的操作函数是ravel:

In [5]: import numpy as np

使用numpy.ravel方法把多维数组扁平化为一维数组;

In [6]: data = np.array([(1, 2, 3, 4), (5, 6, 7, 8)])
In [7]: data.ravel()
Out[7]: array([1, 2, 3, 4, 5, 6, 7, 8])

另外,下面的三个方法会返回新的Numpy数组,不会修改原数组本身:

  1. ravel:把多维数组扁平化为一维数组;
  2. reshape: 把数组调整为指定行列的数组;
  3. T: 把数组进行矩阵转置

使用numpy.reshape方法把数组调整为指定行列的数组

In [11]: data
Out[11]:
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [12]: data.reshape(4, 2)
Out[12]:
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

使用nump.T方法把数组进行矩阵转置

In [13]: data.T
Out[13]:
array([[1, 5],
       [2, 6],
       [3, 7],
       [4, 8]])

使用numpy.reshape时,当第二个参数设为-1时,Numpy会自动根据第一个参数计算第二个参数的值

In [20]: data.reshape(2, -1)
Out[20]:
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

使用numpy.resize方法会就地修改原数组的形状并没有返回新数组
resize效果和reshape一样,但是resize会就地修改原数组并没有返回新数组:

In [17]: data.resize(4,2)

In [18]: data
Out[18]:
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])

Numpy还提供了将不同数组按水平或垂直方向进行合并堆叠的功能:

  1. np.vstack:将不同数组按垂直方向进行合并堆叠的功能
  2. np.hstack:将不同数组按水平方向进行合并堆叠的功能

下面的例子使用np.vstack方法将不同数组按垂直方向进行合并堆叠的功能


In [23]: data2 = np.array([(9, 10), (11, 12), (13, 14), (15, 16)
    ...: ])
       
In [26]: np.vstack((data, data2))

下面的例子使用np.hstack方法将不同数组按垂直方向进行合并堆叠的功能

In [27]: np.hstack((data, data2))