首页 > 编程语言 >为什么你应该使用NumPy数组而不是嵌套的Python列表?

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

时间:2023-01-28 18:33:08浏览次数:40  
标签:Python Numpy 列表 嵌套 数组 array NumPy size


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

Python NumPy Library

NumPy是一个Python库,旨在有效地处理Python中的数组。它快速、简单易学且存储高效。它还改进了流程处理数据的方式。在 NumPy 中,我们可以生成一个 n 维数组。要使用 NumPy,我们只需将其导入我们的程序,然后我们可以轻松地在我们的代码中使用 NumPy 的功能。

Python 嵌套列表

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

  • 嵌套列表可以是同构的,也可以是异构的。
  • 在列表中,无法进行元素操作。
  • 默认情况下,Python 列表是一维的。但是,我们可以制作一个 N 维列表。但它也将是一个存储另一个 1D 列表的 1D 列表。
  • 列表的元素不必在内存中是连续的。
  • Python 列表是有用的通用容器,可用于插入、添加、删除和连接数据。
  • 列表有两个缺点:它们不支持“矢量化”操作,如逐元素加法和乘法,并且因为它们可以包含不同类型的对象,Python 必须存储每个元素的类型信息,并在处理每个元素时执行类型调度代码。

数字派数组

  • 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 模块。
  • 使用 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 列表的比较

内存消耗



# 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 数组的内存效率。

标签:Python,Numpy,列表,嵌套,数组,array,NumPy,size
From: https://blog.51cto.com/10zhancom/6025081

相关文章

  • Python更适合某些编程需求吗?
    在本文中,我们将讨论Python是否更适合某些编程需求?比如竞争性编码。答案是肯定的;Python更适合编码。它在短时间内用更少的行数编写代码。基于产品的公司需要优秀的编码人......
  • #Python 数据查询功能,对标V-LOOKUP
    日常办公中,我们经常会遇到需要匹配表,匹配对应数据的场景,在EXCEL中,我们习惯使用VLOOKUP函数或者是X-LOOKUP函数,今天学习的是Python,pandas库中的匹配功能。首先导入所需的pa......
  • python中关于if的规定
    Python程序语言指定任何非0和非空(null)值为true,0或者null为false。翻译过来就是:0,None,""为false,其它都为true。如下代码所示:if__name__=='__main__':ifnot......
  • 【Python】type、isinstance、issubclass详解
    【Python】type、isinstance、issubclass详解大家好,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、......
  • 【Python】python深拷贝和浅拷贝(一)
    【Python】python深拷贝和浅拷贝(一)大家好,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!定义直......
  • 【Python】python深拷贝和浅拷贝(二)
    【Python】python深拷贝和浅拷贝(二)大家好,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!前言上......
  • python图片拼接
     首先我们来尝试将分片的图片复原为正常的图片这里是六张切成小细条的图片,原本是一张大图的,现在我们用python将他们合并到一块,题外话图片来源于中华连环画,*http://www......
  • 【Python学习002】函数参数
    我们的gzh是【朝阳三只大明白】,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),希望大家一起努力,一起加油!求关注!!概述函数是组织好的、可重复使用的,用来实现单一,或......
  • 上古神兵,先天至宝,Win11平台安装和配置NeoVim0.8.2编辑器搭建Python3开发环境(2023最
    毫无疑问,我们生活在编辑器的最好年代,Vim是仅在Vi之下的神级编辑器,而脱胎于Vim的NeoVim则是这个时代最好的编辑器,没有之一。异步支持、更好的内存管理、更快的渲染速度、更......
  • python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索
    文章目录​​前言​​​​一、IP定位​​​​1.请求URL​​​​2.获取IP定位封装函数​​​​3.输出结果​​​​二、国内天气查询​​​​1.请求url​​​​2.天气查询封装......