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

问题描述 投票:0回答:1

我曾将包含传感器数据的非常大的tdms文件读入numpy数组的列表中,结构如下:几个文件的数据存储在名为file_data的对象实例中。结构如下:来自几个文件的数据被存储在一个名为file_data的对象的实例中,这个对象有每个传感器类型的属性,基本上是numpy数组的列表。该对象有每个传感器类型的属性,基本上是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)))

现在这给了我以下的输出:

数据来自文件1,大小: 2.21 GB。

数据来自文件2,大小:1.88 GB

数据来自文件3,大小:2.27 GB

数据来自文件4,大小:1.53 GB

数据来自文件5,大小:1.01 GB

数据来自文件6,大小:0.66 GB

总内存:9.56 GB

但我正在研究一个 8GB内存 Mac,所以这个数字真的让我很惊讶,因为程序没有崩溃,我可以用数据工作。我哪里弄错了?

python numpy ram labview
1个回答
0
投票

我猜你用的是 npTDMS.

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

也就是说。如果你想要20GB记录中的最后一个元素,npTDMS知道它在文件中的位置,读取并返回它--而不需要读取前20GB。

© www.soinside.com 2019 - 2024. All rights reserved.