转换为numpy数组需要多少内存和处理

How much memory and processing does it take to convert to numpy array

我正在处理的文件需要我将整数加载到长度约为 1800 万的数组中。

做类似

的事情需要多少内存和处理时间
my_list = [123,231,90,20,...,92] #length is 18 million
new_list = np.array(my_list, type='int')

这是计算机简单地创建第二个长度为 1800 万的数组并进行复制还是 numpy 做一些更复杂的事情。

在这种情况下,"processing time" 没有多大用处,因为它主要是指针查找的问题。由于您标记了 post big-O,因此这将是 O(n)。将 Python list 转换为 Numpy 数组时,它将保留内存以在数组中存储 len(my_list) 整数——您可以通过查看默认 int 来准确了解这是多少内存类型在你的 Numpy 上并使用 dtype 对象的 .itemsize 属性:

>>> np.dtype('int')
dtype('int64')
>>> np.dtype('int').itemsize
8

所以这个数组将需要 8 * len(my_list) 字节来存储在原始 my_list 已经使用的内存之上。

然后它需要遍历列表中的每个项目,查找它是什么类型的 Python 对象(记住,Python list 可以是异构的——无法先验知道列表中的每个项目都可以转换为整数)。 Numpy 然后会尽最大努力将该 Python 对象转换为机器整数并将其存储在列表中。

根据这 1800 万个整数的来源,如果可能的话,最好不要首先将它们存储在 Python list 中。但是要多说一点,就需要在问题中提供更多细节。