NumPy 数组合并

在 NumPy 中,合并数组指的是将多个数组合并成一个数组。其中,常用的数组合并函数如下表所示。

NumPy 合并数组的函数
函数 说明
concatenate() 沿 “现有轴” 合并数组
stack() 沿 “新的轴” 合并数组
hstack() 沿水平方向(列方向)合并数组
vstack() 沿垂直方向(行方向)合并数组
dstack() 沿深度方向(第三维度)合并数组

numpy.concatenate() 合并数组

在 NumPy 中,我们可以使用 concatenate() 函数来沿 “现有轴” 合并两个数组。

语法:

numpy.concatenate((arr1, arr2, ...), axis=0, out=None)

说明:

concatenate() 函数接收以下 3 种参数。

  • (arr1, arr2, ...):需要连接的数组序列,例如列表元组
  • axis(可选,默认值:0):指定在结果数组中插入新轴的位置。比如对于两个形状为 (2, 2) 的二维数组,如果 axis = 0,则它们会沿着新的第一个轴堆叠,生成一个形状为 (2, 2, 2) 的三维数组。如果 axis = 1,则形状为 (2, 2, 2),但轴的顺序不同。如果 axis = 2,则形状为 (2, 2, 2),轴的顺序进一步不同。
  • out(可选):用于指定输出数组。

提示:

  • concatenate(axis=1) 等价于 hstack(),表示水平合并。
  • concatenate(axis=0) 等价于 vstack(),表示垂直合并。

示例 1:numpy.concatenate() 基本用法

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])

# 沿着“纵轴”合并
result1 = np.concatenate((arr1, arr2), axis=0)
# 沿着“横轴”合并
result2 = np.concatenate((arr1, arr2), axis=1)

print(result1)
print(result2)

运行结果如下。

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

[[1 2 5 6]
 [3 4 7 8]]

分析:

对于 concatenate() 来说,当 axis=0 时,表示沿着 “纵轴” 合并,也就是垂直堆叠,此时等价于 vstack()。下面 2 种方式是等价的。

# 方式 1
np.concatenate((arr1, arr2), axis=0)

# 方式 2
np.vstack((arr1, arr2))

当 axis=1 时,表示沿着 “横轴” 合并,也就是水平堆叠,此时等价于 hstack()。下面 2 种方式是等价的。

# 方式 1
np.concatenate((arr1, arr2), axis=1)

# 方式 2
np.hstack((arr1, arr2))

numpy.stack() 合并数组

在 NumPy 中,我们可以使用 stack() 函数来沿 “新的轴” 来合并两个数组,合并后的数组比输入数组多一个维度。其中,输入数组的形状必须完全相同。

其中,stack,就是 “堆叠” 的意思。

语法:

numpy.stack((arr1, arr2, ...), axis=0, out=None)

说明:

stack() 函数接收以下 3 种参数。

  • (arr1, arr2, ...):需要连接的数组序列,例如列表或元组。
  • axis(可选,默认值:0):指定连接的轴。比如,两个二维数组(2 x 2)合并后,若如果 axis = 0,那么其形状为 (2, 2, 2)。
  • out(可选):用于指定输出数组。

示例 2:numpy.stack() 基本用法

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
result1 = np.stack((arr1, arr2), axis=0)
result2 = np.stack((arr1, arr2), axis=1)

print(result1)
print(result2)

运行结果如下。

[[[1 2]
  [3 4]]
 [[5 6]
  [7 8]]]

[[[1 2]
  [5 6]]
 [[3 4]
  [7 8]]]

分析:

沿 “现有轴” 合并,指的是根据数组原有的轴进行合并,合并前后的 2 个数组维度不变。沿 “新的轴” 合并,指的是创建一个新的轴进行合并,合并后的数组维度更大。

换一句话来说,两个二维数组使用 concatenate() 方法合并之后,还是一个二维数组。但是两个二维数组使用 stack() 方法合并之后,就变成一个三维数组。

numpy.hstack() 合并数组

在 NumPy 中,我们可以使用 hstack() 函数来水平(按列)顺序堆叠数组。

对于一维数组来说,hstack() 函数是将它们按顺序水平拼接成一个新的更长的一维数组。而对于二维数组来说,hstack() 函数是按列进行拼接。

语法:

numpy.hstack(tup)

说明:

参数 tup 用于指定需要堆叠的数组序列,例如列表或元组。

示例 3:numpy.hstack() 基本用法

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.hstack((arr1, arr2))
print(arr)

运行结果如下。

[[1 2 5 6]
 [3 4 7 8]]

分析:

numpy.hstack((arr1, arr2)) 表示将 arr1 和 arr2 这 2 个数组进行水平合并。

numpy.vstack() 合并数组

在 NumPy 中,我们可以使用 vstack() 函数来垂直(按行)顺序堆叠数组。

对于一维数组来说,vstack() 函数是按行堆叠为二维数组。对于二维数组来说,vstack() 函数是按行拼接。

语法:

numpy.vstack(tup)

说明:

参数 tup 用于指定需要堆叠的数组序列,例如列表或元组。

示例 4:numpy.vstack() 合并数组

import numpy as np

# 一维数组合并
arr1 = np.array([1, 2])
arr2 = np.array([3, 4])
result1 = np.vstack((arr1, arr2))
print(result1)

# 二维数组合并
arr3 = np.array([[1, 2], [3, 4]])
arr4 = np.array([[5, 6], [7, 8]])
result2 = np.vstack((arr3, arr4))
print(result2)

运行结果如下。

[[1 2]
 [3 4]]

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

numpy.dstack() 合并数组

在 NumPy 中,我们可以使用 dstack() 函数来沿深度方向(第三维度)堆叠数组。

对于形状为 (m, n) 的二维数组,dstack() 会沿着深度方向(第三个维度)堆叠它们,生成一个形状为 (m, n, k) 的三维数组,其中 k 是输入数组的数量。

语法:

numpy.dstack(tup)

说明:

参数 tup 用于指定需要堆叠的数组序列,例如列表或元组。

示例 5:numpy.dstack() 基本用法

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.dstack((arr1, arr2))      # 沿深度方向堆叠数组

print(arr)

运行结果如下。

[[[1 5]
  [2 6]]

 [[3 7]
  [4 8]]]

上一篇: NumPy 数组分割

下一篇: NumPy 数组转置

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号