一个numpy ndarray使用了多少内存?

23

有人知道一个numpy ndarray使用多少内存吗?(假设有1000万个浮点数元素)。


这个回答是否解决了您的问题?Python中NumPy数组的内存使用情况 - YaOzI
3个回答

39

这个数组在内存中仅以一个连续的块存储。假设"float"指的是标准的双精度浮点数,那么每个元素需要8个字节。

一般来说,你可以查询nbytes属性获取数组的总内存需求,itemsize获取单个元素的大小(以字节为单位):

>>> a = numpy.arange(1000.0)
>>> a.nbytes
8000
>>> a.itemsize
8

除了实际的数组数据外,还将包含一个小型数据结构,其中包含有关数组的元信息。特别是对于大型数组,此数据结构的大小可以忽略不计。


特别感谢这两个属性,它们非常有帮助。 - Michel Keijzers
1
nbytes 似乎无法正确处理广播数组。例如,np.broadcast_to(np.arange(1000), (int(1e15), 1000)).nbytes == 8e18,这可能需要比地球上存在的RAM还要多的内存。 - Mateen Ulhaq

3
要获取包括元数据在内的NumPy数组的总内存占用量(以字节为单位),可以使用Python的sys.getsizeof()函数:
import sys
import numpy as np

a = np.arange(1000.0)

sys.getsizeof(a)

这个结果是8104字节

sys.getsizeof() 适用于任何Python对象。它报告的是内部内存分配,而不一定是该对象写入某个文件格式后的内存占用量。有时它会极大地误导人。例如,在处理2D数组时,它无法深入挖掘向量的内存占用情况。

请参见此处的文档。Ned Batchelder在这里分享了使用sys.getsizeof()的注意事项。


0

我猜,我们可以通过print(a.size // 1024 // 1024, a.dtype)轻松计算出来。 这类似于使用了多少MB,但是有了参数dtype,float=8B,int8=1B...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接