栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

与numpy的OBJECTS数组相比,列表列表在内存方面有什么优点/缺点?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

与numpy的OBJECTS数组相比,列表列表在内存方面有什么优点/缺点?

我将回答您的主要问题,而忽略其他问题(移调的性能等)。所以:

我想了解,使用numpy的名单将有…只是为了澄清我很感兴趣,在numpy的数组类型是这样的内存和其它开销的影响

object
不是
float
double
int

Python列表是指向Python对象的指针的数组,这些对象包装了您存储在其中的任何实际值,外加一些额外的余量以使其能够快速有效地扩展。只是为了便于计算,我们将其称为松弛20%。例如,由10000个32位整数组成的列表占用了数组96000字节,为Python整数对象占用了约240000字节,再加上列表本身的开销很小,又说了80个字节。

NumPy数组是您存储在其中的任何实际值的数组。例如,由10000个32位整数组成的数组占用40000个字节,加上数组本身的少量开销(例如80个字节)。但是,当您使用dtype时

object
,每个“实际值”都只是一个指向Python对象的指针,就像使用一样
list

因此,这里唯一真正的区别是松弛:数组将使用320080字节,而列表将使用336080字节。差别不大,但是很重要。


而且,在2D与ND或沿给定尺寸的尺寸中,一个变得比另一个更快。

是的,嵌套列表的增长速度会更快…但是数量不会很大。

在numpy的多维数组存储为一个巨大的阵列(在C或Fortran的跨步顺序),形状,从而是

(10000,)
(100, 100)
,或者
(10,10, 10, 10)
,它的大小相同。(开销可能会增加几个字节,以存储有关跨步的更多信息,但是如果我们要说的是256字节与320K中的80字节,谁在乎?)

另一方面,嵌套列表包含更多列表,每个级别都有松弛和开销。例如,由10个列表组成的10个列表组成的10个整数列表具有1 + 10 + 100 +
1000个包含12个指针的数组和1 + 10 + 100 + 1000个列表头。

因此,该数组仍在使用320080字节,或者可能是320256字节,但列表使用的是435536。


如果您想更多地了解如何

list
实现……那么,这取决于您使用的实现。但是在CPython中,C
API
几乎可以保证它将存储连续的数组
PyObject*
,而附加摊销固定时间这一事实实际上要求它留出按比例增长的松弛度。您可以在标题和源代码中看到它的作用。(此外,请记住,从该源获得的特定大小通常取决于您在其上编译的平台。最重要的是,由于到处都有指针,因此64位平台的大小通常在50-100之间与32位平台相比,大多数对象每个对象的开销增加了%。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661692.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号