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

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

本文将向您展示为什么应该使用NumPy数组而不是嵌套的Python列表,以及它们之间的相似性和差异。

Python NumPy库

NumPy是一个专为在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]]

1维Numpy数组的表示

步骤

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

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

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

  • 打印1维数组。

# 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数组在内存效率上优于嵌套列表。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程