1.数组的拼接
拼接或连接NumPy中的两个数组主要由np.concatenate、np.vstack和np.hstack例程实现。np.concatenate将数组元组或数组列表作为第一个参数。
x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
np.concatenate([x, y]) # array([1, 2, 3, 3, 2, 1])
可以一次性拼接两个以上数组:
z = [99, 99, 99]
np.concatenate([x, y, z])
grid = np.array([[1, 2, 3],
[4, 5, 6]])
沿着第一个轴拼接:
np.concatenate([grid, grid])
# array([[1, 2, 3],
# [4, 5, 6],
# [1, 2, 3],
# [4, 5, 6]])
沿着第二个轴拼接
np.concatenate([grid, grid], axis=1)
# array([[1, 2, 3, 1, 2, 3],
# [4, 5, 6, 4, 5, 6]])
沿着固定维度处理数组时,使用np.vstack(垂直栈)和np.hstack(水平栈)函数会更简洁:
x = np.array([1, 2, 3])
grid = np.array([[9, 8, 7],
[6, 5, 4]])
垂直栈数组
np.vstack([x, grid])
# array([[1, 2, 3],
# [9, 8, 7],
# [6, 5, 4]])
水平栈数组
y = np.array([[99],
[99]])
np.hstack([grid, y])
# array([[ 9, 8, 7, 99],
# [ 6, 5, 4, 99]])
与之类似,np.dstack将沿着第三个维度拼接数组。
2.数组的分裂
分裂可以通过np.split、np.hsplit和np.vsplit函数来实现。可以向以上函数传递一个索引列表作为参数,索引列表记录的是分裂点位置:
x = [1, 2, 3, 99, 99, 3, 2, 1]
x1, x2, x3 = np.split(x, [3, 5]) # x1 : array([1, 2, 3]); x2 : array([99, 99]);x3 : array([3, 2, 1])
值得注意的是,N分裂点会得到N+1个子数组。相关的np.hsplit和np.vsplit的用法也类似:
grid = np.arange(16).reshape((4, 4))
# array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15]])
upper, lower = np.vsplit(grid, [2])
# upper : array([[0, 1, 2, 3],
# [4, 5, 6, 7]])
# lower : array([[ 8, 9, 10, 11],
# [12, 13, 14, 15]])
left, right = np.hsplit(grid, [2])
# left : array([[ 0, 1],
# [ 4, 5],
# [ 8, 9],
# [12, 13]])
# right : array([[ 2, 3],
# [ 6, 7],
# [ 10, 11],
# [14, 15]])
同样,np.dsplit将数组沿着第三个维度分裂。