Python技巧:二维列表 和 二维矩阵 的区别
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 nplist_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 npmatrix_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. 总结
ndarray
对象np.vstack
输入np.vstack
输出示例对比
输入为二维列表
import numpy as nplist_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 npmatrix_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
可以处理两者,但输入为二维矩阵时性能更高。