为什么应该使用 NumPy 数组而不是嵌套 Python 列表?


在本文中,我们将向您展示为什么使用 NumPy 数组而不是嵌套 Python 列表,以及它们之间的一些异同点。

Python NumPy 库

NumPy 是一个为 Python 中的数组高效工作而设计的 Python 库。它速度快、易于学习且存储效率高。它还改进了数据处理的方式。在 NumPy 中,我们可以生成一个 n 维数组。要使用 NumPy,我们只需将其导入到我们的程序中,然后我们就可以轻松地在代码中使用 NumPy 的功能。

Python 嵌套列表

Python 列表是元素的可变且有序的集合。在 Python 中,列表用方括号表示。

  • 嵌套列表可以是同构的或异构的。

  • 在列表上,逐元素操作是不可能的。

  • Python 列表默认情况下是一维的。但是,我们可以创建一个 N 维列表。但它也将是一个存储另一个一维列表的一维列表。

  • 列表的元素不必在内存中连续。

  • Python 列表是有用的通用容器,可用于插入、添加、删除和连接数据。

  • 列表有两个缺点:它们不支持像逐元素加法和乘法这样的“矢量化”运算,并且由于它们可以包含不同类型的对象,因此 Python 必须为每个元素存储类型信息并在处理每个元素时执行类型分派代码。

NumPy 数组

  • NumPy 更高效、更方便,因为它免费提供了大量向量和矩阵运算,从而减少了工作量和代码复杂性。与嵌套循环相比,Numpy 也更高效。

  • NumPy 数组速度更快,并包含更多内置函数来执行 FFT、卷积、快速搜索、线性代数、基本统计、直方图和其他任务。

  • Numpy 数组允许对大量数据执行高级数学和其他运算。

  • 数组默认情况下是同构的,这意味着数组中的所有数据都必须是相同的数据类型。(请注意,可以在 Python 中类似地创建结构化数组。)

  • 逐元素操作是可行的。

  • Numpy 数组包含各种函数、方法和变量来帮助我们进行矩阵计算工作。

  • 数组的元素在内存中紧密排列在一起。例如,二维数组必须在其所有行中具有相同数量的列。另一方面,三维数组必须在每张卡上具有相同数量的行和列。

嵌套列表的表示

示例

# creating a nested list inputList= [[2, 7, 8], [1, 5, 4]] # printing nested List print(inputList)

输出

执行上述程序后,将生成以下输出:

[[2, 7, 8], [1, 5, 4]]

一维 NumPy 数组的表示

算法(步骤)

以下是执行所需任务的算法/步骤:

  • 使用 import 关键字,使用别名 (np) 导入 **numpy** 模块。

  • 使用 numPy 模块的 **array()** 函数(返回一个 ndarray。ndarray 是一个满足给定要求的数组对象)来创建一个一维 numpy 数组。

  • 打印一维数组

# importing numpy module with an alias name import numpy as np # creating a 1-dimensional numpy array inputArray = np.array([12, 4, 8, 6]) # printing 1-D array print(inputArray)

输出

执行上述程序后,将生成以下输出:

[12 4 8 6]

多维 NumPy 数组的表示

示例

# importing numpy module with an alias name import numpy as np # creating a multi-dimensional numpy array inputArray = np.array([(2, 7, 8), (1, 5, 4)]) # printing multi-dimensional array print(inputArray)

输出

执行上述程序后,将生成以下输出:

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

使用 NumPy 数组优于 Python 列表的优势

  • 占用更少的内存。

  • 比 Python 列表快。

  • 易于使用。

列表和数组之间的相似之处

  • 它们都使用方括号([])。

  • 数组和列表都是可变的(都可以修改元素)。

  • NumPy 数组和列表都可以被索引并用于切片。

NumPy 数组和 Python 列表之间的区别

NumPy 数组 Python 列表
数组可以直接处理数学运算 列表不能直接进行数学运算。
比列表占用更少的内存 占用更多内存
数组比列表快 与数组相比,列表相对较慢
修改起来比较复杂 更容易修改
数组不能包含不同的大小数据 列表可以包含多个嵌套的大小数据。
数组不能存储不同的数据类型 列表可以存储不同的数据类型

NumPy 数组和 Python 列表的比较

内存消耗

# importing numpy module with an alias name import numpy as np # importing system module import sys # creating a nested list inputList= [[2, 7, 8], [1, 5, 4]] # printing the size of each item of list(bytes) print("The size of each item of list(bytes) = ",sys.getsizeof(inputList)) # printing size of the entire list(bytes) print("The size of the entire list(bytes) = ",sys.getsizeof(inputList)*len(inputList)) # creating a Numpy array with same elements inputArray= np.array([(2, 7, 8), (1, 5, 4)]) # printing each element of Numpy array(bytes) size print("Each element of Numpy array(bytes) size = ",inputArray.itemsize) # printing the entire Numpy array(bytes) size print("The entire Numpy array(bytes) size = ", inputArray.size*inputArray.itemsize)

输出

执行上述程序后,将生成以下输出:

The size of each item of list(bytes) = 88
The size of the entire list(bytes) = 176
Each element of Numpy array(bytes) size = 8
The entire Numpy array(bytes) size = 48

我们可以观察到,嵌套列表比 numpy 数组消耗了更多的内存。

结论

在本文中,我们了解了为什么 NumPy 数组在 Python 中比嵌套列表更有用。我们使用一个示例来演示 NumPy 数组在内存效率方面优于嵌套列表。

更新于: 2022 年 10 月 20 日

2K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始
广告