大于 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。
我已经将包含传感器数据的非常大的 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。