大于 RAM 的 numpy 数组使用的内存?

Memory used by numpy arrays larger than RAM?

我已经将包含传感器数据的非常大的 tdms 文件读取到 numpy 数组列表中。结构如下: 来自多个文件的数据存储在名为 file_data 的对象的实例中。该对象具有每种传感器类型的属性,这些属性基本上是 numpy 数组列表(该传感器类型的每个传感器一个)。

我想知道我在这里存储了多少数据(因为 Labview 生成的 tdms 文件的大小似乎没有多大意义,包含所有元数据)。

这是代码:

# Check memory
total = 0
file_data = [file_data1, file_data2, ...] # list of data objects read from six files
for no, f in enumerate(file_data):
    sensor_types = [f.sensortype1, f.sensortype2, ...] # list of sensor types
    sum = 0
    for sensor_type in sensor_types: # list
        for data in sensor_type: #np.array
            sum += (data.size * data.itemsize)
    total += sum
    print('Data from file {}, size: {:.2f} GB'.format(no+1, sum/(1024**3))) 
print('Total memory: {:.2f} GB'.format(total/(1024**3)))

现在这给了我以下输出:

Data from file 1, size: 2.21 GB

Data from file 2, size: 1.88 GB

Data from file 3, size: 2.27 GB

Data from file 4, size: 1.53 GB

Data from file 5, size: 1.01 GB

Data from file 6, size: 0.66 GB

Total memory: 9.56 GB

但我正在使用 8GB RAM Mac,所以这个数字真的让我感到惊讶,因为程序没有崩溃而且我可以处理数据.我哪里弄错了?

我猜你用的是 npTDMS.

使用的numpy.array类型不仅仅是一个简单的数组,其中所有数组元素总是存储在内存中。 虽然数据类型和元素数量是已知的(在本例中是通过从 TDMS 文件中读取元数据),但在请求之前不会读取元素。

也就是说:如果您想要 20GB 记录的最后一个元素,npTDMS 知道它在文件中的存储位置,读取并 returns 它 - 而无需读取前 20GB。