有人知道一个numpy ndarray使用多少内存吗?(假设有1000万个浮点数元素)。
有人知道一个numpy ndarray使用多少内存吗?(假设有1000万个浮点数元素)。
这个数组在内存中仅以一个连续的块存储。假设"float"指的是标准的双精度浮点数,那么每个元素需要8个字节。
一般来说,你可以查询nbytes
属性获取数组的总内存需求,itemsize
获取单个元素的大小(以字节为单位):
>>> a = numpy.arange(1000.0)
>>> a.nbytes
8000
>>> a.itemsize
8
除了实际的数组数据外,还将包含一个小型数据结构,其中包含有关数组的元信息。特别是对于大型数组,此数据结构的大小可以忽略不计。
nbytes
似乎无法正确处理广播数组。例如,np.broadcast_to(np.arange(1000), (int(1e15), 1000)).nbytes == 8e18
,这可能需要比地球上存在的RAM还要多的内存。 - Mateen Ulhaqsys.getsizeof()
函数:import sys
import numpy as np
a = np.arange(1000.0)
sys.getsizeof(a)
这个结果是8104字节
sys.getsizeof()
适用于任何Python对象。它报告的是内部内存分配,而不一定是该对象写入某个文件格式后的内存占用量。有时它会极大地误导人。例如,在处理2D数组时,它无法深入挖掘向量的内存占用情况。
我猜,我们可以通过print(a.size // 1024 // 1024, a.dtype)
轻松计算出来。
这类似于使用了多少MB
,但是有了参数dtype
,float=8B,int8=1B...