np.vstack
是 NumPy 中的一个函数,用于将多个数组沿垂直方向(行方向)堆叠。它可以处理 二维列表 和 二维矩阵,但它们之间有一些关键区别。以下是详细说明:
1. 二维列表
-
定义:
- 二维列表是 Python 原生的数据结构,是一个列表的列表。
- 例如:
list_2d = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- 它是一个嵌套的列表结构,每个子列表代表一行数据。
-
特点:
- 不是 NumPy 数组,因此不支持 NumPy 的向量化操作(如广播、数学运算等)。
- 灵活性高,可以存储不同类型的数据(如整数、字符串等)。
- 内存效率较低,适合小规模数据。
-
使用
np.vstack
:np.vstack
可以将多个二维列表堆叠成一个二维数组。- 例如:
输出:import numpy as np list_2d_1 = [[1, 2, 3], [4, 5, 6]] list_2d_2 = [[7, 8, 9], [10, 11, 12]] result = np.vstack((list_2d_1, list_2d_2)) print(result)
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
2. 二维矩阵
-
定义:
- 二维矩阵是 NumPy 的
ndarray
对象,是一个二维数组。 - 例如:
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
- 它是一个连续的内存块,支持高效的数值计算。
- 二维矩阵是 NumPy 的
-
特点:
- 是 NumPy 数组,支持向量化操作(如广播、数学运算等)。
- 内存效率高,适合大规模数值计算。
- 所有元素必须是相同的数据类型。
-
使用
np.vstack
:np.vstack
可以将多个二维矩阵堆叠成一个更大的二维矩阵。- 例如:
输出:import numpy as np matrix_1 = np.array([[1, 2, 3], [4, 5, 6]]) matrix_2 = np.array([[7, 8, 9], [10, 11, 12]]) result = np.vstack((matrix_1, matrix_2)) print(result)
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
3. np.vstack
的区别
-
输入类型:
np.vstack
可以接受二维列表或二维矩阵作为输入。- 如果输入是二维列表,
np.vstack
会将其转换为 NumPy 数组后再堆叠。 - 如果输入是二维矩阵,
np.vstack
直接进行堆叠。
-
输出类型:
- 无论输入是二维列表还是二维矩阵,
np.vstack
的输出始终是 NumPy 二维数组(ndarray
)。
- 无论输入是二维列表还是二维矩阵,
-
性能:
- 对于二维矩阵,
np.vstack
的性能更高,因为 NumPy 数组是连续的内存块。 - 对于二维列表,
np.vstack
需要先将其转换为 NumPy 数组,因此性能稍低。
- 对于二维矩阵,
4. 总结
特性 | 二维列表 | 二维矩阵(NumPy 数组) |
---|---|---|
定义 | 列表的列表 | NumPy 的 ndarray 对象 |
数据类型 | 可以存储不同类型的数据 | 所有元素必须是相同的数据类型 |
内存效率 | 较低 | 较高 |
数值计算支持 | 不支持向量化操作 | 支持向量化操作(如广播、数学运算) |
np.vstack 输入 | 可以接受 | 可以接受 |
np.vstack 输出 | 转换为 NumPy 数组后堆叠 | 直接堆叠 |
示例对比
输入为二维列表
import numpy as np
list_2d_1 = [[1, 2, 3], [4, 5, 6]]
list_2d_2 = [[7, 8, 9], [10, 11, 12]]
result = np.vstack((list_2d_1, list_2d_2))
print(result)
输出:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
输入为二维矩阵
import numpy as np
matrix_1 = np.array([[1, 2, 3], [4, 5, 6]])
matrix_2 = np.array([[7, 8, 9], [10, 11, 12]])
result = np.vstack((matrix_1, matrix_2))
print(result)
输出:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
总结
- 二维列表 是 Python 原生的数据结构,灵活但效率较低。
- 二维矩阵 是 NumPy 的
ndarray
,适合高效的数值计算。 np.vstack
可以处理两者,但输入为二维矩阵时性能更高。