这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战
在进行数据处理中,总会需要对多维数据的形状大小进行调整,比如把一个2行3列的数组调整为3行2列的数组以满足计算要求。Numpy提供了非常丰富好用且简单的操作方法:
- ravel:把多维数组扁平化为一维数组;
- reshape: 把数组调整为指定行列的数组;
- T: 把数组进行矩阵转置
- resize:会就地修改原数组并没有返回新数组
- np.vstack:将不同数组按垂直方向进行合并堆叠的功能
- 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数组,不会修改原数组本身:
- ravel:把多维数组扁平化为一维数组;
- reshape: 把数组调整为指定行列的数组;
- 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还提供了将不同数组按水平或垂直方向进行合并堆叠的功能:
- np.vstack:将不同数组按垂直方向进行合并堆叠的功能
- 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))