7 重置数组的形状

0 阅读2分钟

前言

在处理多维数组时,会遇到改变数组结构的情况,例如一维数组改变维二维数组、三维数组,二维数组改变多维数组等等,而 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()

image.png

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