转换为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
中。但是要多说一点,就需要在问题中提供更多细节。
我正在处理的文件需要我将整数加载到长度约为 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
中。但是要多说一点,就需要在问题中提供更多细节。