NumPy数组规整
堆叠
沿行堆叠
下面将展示三种办法将两个等长一维数组沿行 axis = 0 方向堆叠,结果为二维数组。
numpy.stack()
函数将沿着指定轴将多个数组堆叠在一起,返回一个新的数组,默认轴为 axis = 0。numpy.row_stack()
函数将多个数组沿着行方向进行堆叠,生成一个新的数组。numpy.vstack()
将多个数组沿着垂直方向(行方向)进行堆叠,生成一个新的数组。
下面是使用例:
import numpy as np
a = np.arange(1, 5+1)
b = np.arange(-5, -1+1)
Stack = np.stack((a, b))
Row_stack = np.row_stack((a, b))
Vstack = np.vstack((a, b))
# [[ 1 2 3 4 5]
# [-5 -4 -3 -2 -1]]
沿列堆叠
下面将展示三种办法将两个等长一维数组沿列 axis = 1 方向堆叠,结果为二维数组。
numpy.stack()
函数将沿着指定轴将多个数组堆叠在一起,将参数 axis 设置为 1。numpy.column_stack()
将多个一维数组沿着列方向进行堆叠,生成一个新的二维数组numpy.hstack()
将多个数组沿着水平方向 (列方向) 进行堆叠,生成一个新的数组。注意:用numpy.hstack()
堆叠一维数组的结果还是一个一维数组。为了获得与上面相似的结果,需要先将两个一维数组变形为列向量,然后用numpy.hstack()
函数沿列堆叠。
下面是使用例:
import numpy as np
a = np.arange(1, 5+1)
b = np.arange(-5, -1+1)
Stack = np.stack((a, b), axis=1)
Column_stack = np.column_stack((a, b))
Hstack = np.hstack((a.reshape(-1, 1), b.reshape(-1, 1)))
# [[ 1 -5]
# [ 2 -4]
# [ 3 -3]
# [ 4 -2]
# [ 5 -1]]
提示
利用 np.stack()
,我们还可以将二维数组堆叠为三维数组,堆叠方式如下图所示:
拼接
我们还可以用 numpy.concatenate()
完成数组拼接。利用 numpy.concatenate()
, 我们可以分别完成沿行、列方向数组拼接。
下面是使用例:
import numpy as np
a = np.array([[1, 2, 3], [5, 6, 7], [9, 10, 11]])
b = np.array([[13, 14, 15]])
c = np.array([[4], [8], [12]])
axis0 = np.concatenate((a, b), axis=0)
# [[ 1 2 3]
# [ 5 6 7]
# [ 9 10 11]
# [13 14 15]]
axis1 = np.concatenate((a, c), axis=1)
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
重复
numpy.repeat()
和 numpy.tile()
都可以用来重复数据。numpy.repeat()
和 numpy.tile()
的区别在于重复的对象不同。numpy.repeat()
重复的是数组中的每个元素。numpy.repeat()
还可以指定具体的轴,以及不同元素重复的次数;而 numpy.tile()
重复的是整个数组。
下面是使用例:
import numpy as np
a = np.arange(1, 3+1)
b = np.repeat(a, 3)
# [1 1 1 2 2 2 3 3 3]
c = np.tile(a, 3)
# [1 2 3 1 2 3 1 2 3]
分块矩阵
合成
numpy.block()
函数用于将多个数组沿不同的轴组合成一个分块矩阵。它接受一个嵌套列表作为输入,每个列表代表一个块矩阵,然后根据指定的轴将这些块矩阵组合在一起。
下面以四个小矩阵合成一个大矩阵为例:
import numpy as np
a = np.array([[1, 1, 1], [1, 1, 1]])
b = np.array([[2, 2], [2, 2]])
c = np.array([[3, 3]])
d = np.array([[4, 4, 4]])
M = np.block([[a, b], [c, d]])
# [[1 1 1 2 2]
# [1 1 1 2 2]
# [3 3 4 4 4]]
切割
numpy.split()
函数可以将一个数组沿指定轴分割为多个子数组。numpy.split()
接受三个参数:要分割的数组、分割的索引位置、沿着哪个轴进行分割。
下面以一维数组三等分得到三个子数组为例:
import numpy as np
a = np.arange(1, 6+1)
b, c, d = np.split(a, 3)
# b=[1, 2], c=[3, 4], d=[5, 6]
numpy.split()
还可以将二维数组沿不同轴三等分。另外使用 numpy.hsplit()
和 numpy.vsplit()
也完成类似操作。如下图:
提示
其它的函数还有 numpy.append()
、numpy.insert()
、numpy.delete()
可以完成附加、插入、删除操作。