本文共 2692 字,大约阅读时间需要 8 分钟。
NumPy 提供了多种数组拼接方法,能够满足不同场景的需求。本文将从基本概念、详细解析、注意事项以及场景选择四个方面对 NumPy 数组拼接进行全面讲解。
数组拼接是指将多个数组组合成一个更大的数组。NumPy 提供了多种拼接方式,主要包括沿现有维度拼接(如行方向或列方向)和增加新维度后拼接(如堆叠到新轴上)。以下是常见的数组拼接函数及其核心区别:
| 函数名 | 描述 | 新增新轴? |
|---|---|---|
| concatenate | 沿指定轴拼接数组,无新增维度 | 否 |
| vstack | 垂直堆叠,相当于 axis=0 | 否 |
| hstack | 水平堆叠,相当于 axis=1 | 否 |
| stack | 沿新轴拼接数组,增加新维度 | 是 |
| dstack | 沿深度(第三维)堆叠 | 是 |
| append | 追加元素到数组,功能类似 concatenate | 否 |
| column_stack | 将 1D 数组作为列拼接到 2D 数组中 | 是 |
| row_stack | 将 1D 数组作为行拼接到 2D 数组中 | 是 |
concatenate 是最通用的拼接方法,适合将多个数组沿现有轴拼接。其核心功能是将多个数组合并成一个更大的数组,且无需新增维度。
np.concatenate(arrays, axis=0)
import numpy as np# 示例 1:垂直拼接(默认 axis=0)a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6]])result = np.concatenate((a, b), axis=0)print(result)
输出:
[[1 2] [3 4] [5 6]]
a = np.array([[1, 2], [3, 4]])b = np.array([[5], [6]])result = np.concatenate((a, b), axis=1)print(result)
输出:```plaintext[[1 2 5] [3 4 6]]
a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6, 7]]) # 错误:形状不匹配
vstack 和 hstack 是 concatenate 的简化版本,分别用于垂直和水平堆叠。
np.vstack(arrays)
将多个 1D 数组垂直堆叠成一个 2D 数组。
示例:
a = np.array([1, 2])b = np.array([3, 4])result = np.vstack((a, b))print(result)
输出:
[[1 2] [3 4]]
np.hstack(arrays)
将多个 1D 数组水平堆叠成一个 2D 数组。
示例:
a = np.array([[1], [2]])b = np.array([[3], [4]])result = np.hstack((a, b))print(result)
输出:
[[1 3] [2 4]]
stack 用于沿新轴堆叠多个数组,适合增加维度后拼接。
np.stack(arrays, axis=0)
a = np.array([1, 2])b = np.array([3, 4])# 沿新轴堆叠result = np.stack((a, b), axis=0)print(result)
输出:
[[1 2] [3 4]]
如果 axis=1:
result = np.stack((a, b), axis=1)print(result)
输出:
[[1 3] [2 4]]
dstack 是专门用于沿深度(第三维)堆叠的函数。
示例:
a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])result = np.dstack((a, b))print(result)
输出:
[[[1 5] [2 6]] [[3 7] [4 8]]]
append 方法用于将元素追加到数组,功能类似于 concatenate,但只适用于单个元素的追加。
示例:
a = np.array([1, 2, 3])b = np.array([4, 5, 6])# 追加元素result = np.append(a, b)print(result)
输出:
[1 2 3 4 5 6]
将 1D 数组作为列拼接到 2D 数组中。
示例:
a = np.array([1, 2, 3])b = np.array([4, 5, 6])result = np.column_stack((a, b))print(result)
输出:
[[1 4] [2 5] [3 6]]
将 1D 数组作为行拼接到 2D 数组中。
示例:
a = np.array([1, 2, 3])b = np.array([4, 5, 6])result = np.row_stack((a, b))print(result)
输出:
[[1 2 3] [4 5 6]]
| 需求 | 推荐方法 |
|---|---|
| 沿行或列拼接 | concatenate |
| 垂直堆叠 | vstack |
| 水平堆叠 | hstack |
| 增加新维度拼接 | stack |
| 拼接深度方向(三维数据) | dstack |
| 简单追加元素 | append |
| 1D 数组拼接为列或行 | column_stack 或 row_stack |
通过合理选择拼接方法,可以高效地完成数组操作,充分利用 NumPy 的强大功能。
转载地址:http://ogjfk.baihongyu.com/