前言
在处理多维数组时,会遇到改变数组结构的情况,例如一维数组改变维二维数组、三维数组,二维数组改变多维数组等等,而 Numpy 提高了 reshape、flatten....等方法,可以快速改变数组的形状
修改数组形状的方式
| 方法 | 说明 |
|---|---|
| reshape() | 改变数组形状。 |
| flatten()、numpy.ravel() | 扁平化数组。 |
| numpy.transpose()、T | 互换维度 |
| numpy.rollaxis()、numpy.swapaxes() | 根据指定的【轴】,将数组项目【滚动】或【交换】位置 |
reshape()
reshape() 可以将现有的数组,转换为指定特定维度的数组,使用时必须注意维度的元素总数,要和原本的数组相同,下方的例子会将一个一维数组,转换为 4x2 以及 2x4 的数组
import numpy as np
a = np.array([1,2,3,4,5,6,7,8])
b = a.reshape((4,2))
print(b)
'''
[[1 2]
[3 4]
[5 6]
[7 8]]
'''
c = a.reshape((2,4))
print(c)
'''
[[1 2 3 4]
[5 6 7 8]]
'''
如果转换的时候不确定该维度有多个元素,可以使用【-1】代替,下方的例子会将一个 4x2 的二维数组,变成一维数组、2x4 数组以及三维数组
import numpy as np
a = np.array([[1,2],[3,4],[5,6],[7,8]])
b = a.reshape(-1) # 轉換成一維陣列
print(b) # [1 2 3 4 5 6 7 8]
c = a.reshape((2,-1)) # 等同 a.reshape((2,4))
print(c)
'''
[[1 2 3 4]
[5 6 7 8]]
'''
d = a.reshape((2,2,-1)) # 等同 a.reshape((2,2,2))
print(d)
'''
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
'''
flatten()、numpy.ravel()
flatten() 和 numpy.ravel() 能將多维度的数组,扁平化成一维数组,可以设定 order 参数调整扁平的顺序,预设为 C,表示先水平再垂直,设定为 F 表示先垂直再水平 numpy.org/doc/stable/…
import numpy as np
a = np.array([[1,2],[3,4],[5,6],[7,8]])
b = a.flatten('C') # [1 2 3 4 5 6 7 8]
c = a.flatten('F') #[1 3 5 7 2 4 6 8]
b1 = np.ravel(a,'C') # [1 3 5 7 2 4 6 8]
c1 = np.ravel(a,'F') #[1 3 5 7 2 4 6 8]
除了 flatten 的方法,也可以直接使用 flat 转换成一维数组并且取值
import numpy as np
a = np.array([[1,2],[3,4],[5,6],[7,8]])
b = a.flat[3]
print(b) # 4
numpy.transpose(), T
numpy.transpose() 和 T 可以将数组列的行与列互换,产生新的数组
import numpy as np
a = np.array([[1,2],[3,4]])
b = a.T
c = np.transpose(a)
print(b)
'''
[[1 3]
[2 4]]
'''
print(c)
'''
[[1 3]
[2 4]]
'''
numpy.rollaxis()、numpy.swapaxes()
numpy.rollaxis 共有三个参数 arr 表示阵列,axis 表示起始的轴,start 表示滚动的特定位置
import numpy as np
a = np.array([[1,1,1],[2,2,2],[3,3,3]])
b = np.rollaxis(a,0,0)
c = np.rollaxis(a,1,0)
print(b)
'''
[[1 1 1]
[2 2 2]
[3 3 3]]
'''
print(c)
'''
[[1 2 3]
[1 2 3]
[1 2 3]]
'''
numpy.swapaxes 共有三个参数 arr 表示数组,axis1 是对应第一个轴的整数,axis2 是对应第二个轴的整数
import numpy as np
a = np.array([[1,1,1],[2,2,2],[3,3,3]])
b = np.swapaxes(a,0,0)
c = np.swapaxes(a,0,1)
print(b)
'''
[[1 1 1]
[2 2 2]
[3 3 3]]
'''
print(c)
'''
[[1 2 3]
[1 2 3]
[1 2 3]]
'''