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

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

在本文中,我们将向您展示使用 NumPy 数组而不是嵌套的 Python 列表的原因,以及它们之间的相似之处和区别。

阅读更多: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关键字导入NumPy模块并使用别名(np)。

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

  • 打印一维数组。

#使用别名导入numpy模块
import numpy as np

# 创建一维numpy数组
inputArray = np.array([12, 4, 8, 6])

# 打印一维数组
print(inputArray)

输出:

执行上面程序后,将输出以下内容:

[12 4 8 6]

多维Numpy数组的表示

  • 使用import关键字导入NumPy模块并使用别名(np)。

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

  • 打印多维数组。

#使用别名导入numpy模块
import numpy as np

# 创建多维numpy数组
inputArray = np.array([(2, 7, 8), (1, 5, 4)])

# 打印多维数组
print(inputArray)

输出:

执行上面程序后,将输出以下内容:

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

使用Numpy数组的优势

  • 占用更少的内存。

  • 比Python列表快。

  • 易于使用。

列表和数组的相似之处

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

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

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

Numpy数组与Python列表的区别

Numpy数组 Python列表
数组可以直接处理数学操作 不能直接进行数学操作。
比列表占用更少的内存 占用更多内存
数组比列表快 列表相对较慢。
数组修改比较复杂 更容易修改
数组不能包含不同的数据大小 列表可以包含几种不同的嵌套数据大小。
数组不能存储不同的数据类型 列表可以存储不同的数据类型

Numpy数组和Python列表的比较

内存消耗

# 导入别名为np的numpy模块
import numpy as np

# 导入系统模块
import sys

# 创建嵌套列表
inputList= [[2, 7, 8], [1, 5, 4]]

# 打印列表中每个项的大小(bytes)
print("列表中每个项的大小(bytes)= ",sys.getsizeof(inputList))

# 打印整个列表的大小(bytes)
print("整个列表的大小(bytes)= ",sys.getsizeof(inputList)*len(inputList))

# 创建由相同元素组成的Numpy数组
inputArray= np.array([(2, 7, 8), (1, 5, 4)])

# 打印Numpy数组中每个元素的大小(bytes)
print("Numpy数组中每个元素的大小(bytes)= ",inputArray.itemsize)

# 打印整个Numpy数组的大小(bytes)
print("整个Numpy数组的大小(bytes)= ", inputArray.size*inputArray.itemsize)

输出

运行以上程序将会输出如下所示的结果 −

列表中每个项的大小(bytes)= 88
整个列表的大小(bytes)= 176
Numpy数组中每个元素的大小(bytes)= 8
整个Numpy数组的大小(bytes)= 48

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

结论

在本文中,我们了解了为什么在Python中NumPy数组比嵌套列表更有用。我们使用一个例子来证明NumPy数组在内存效率上比嵌套列表更优。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程