> 技术文档 > Python技巧:二维列表 和 二维矩阵 的区别

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 数组,支持向量化操作(如广播、数学运算等)。
    • 内存效率高,适合大规模数值计算。
    • 所有元素必须是相同的数据类型。
  • 使用 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. 总结

特性 二维列表 二维矩阵(NumPy 数组) 定义 列表的列表 NumPy 的 ndarray 对象 数据类型 可以存储不同类型的数据 所有元素必须是相同的数据类型 内存效率 较低 较高 数值计算支持 不支持向量化操作 支持向量化操作(如广播、数学运算) np.vstack 输入 可以接受 可以接受 np.vstack 输出 转换为 NumPy 数组后堆叠 直接堆叠

示例对比

输入为二维列表
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 可以处理两者,但输入为二维矩阵时性能更高。