为什么应该使用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数组在内存效率上优于嵌套列表。