我得到了17,373个netCDF4文件(总计18GB)。我需要从每个文件中读取一个float32值的固定大小的数组(1x24),并将它们写到.mat文件的单个变量中。 .mat文件中的结果表应为(17,373 x 24)。
每个文件存储单个时间点的数据(特别是大约两年中每小时的数据)。
Matlab版本:2007b Python 3.7 scipy 1.2.1 numpy 1.15.4
我了解到,将numpy数组列表写到.mat文件中将产生一个表:
import numpy as np
import scipy.io
t1 = np.arange(0,9) # array([0,..., 8])
t2 = np.arange(10,19) # array([10,..., 18])
pyTable = [t1, t2] # [array([0,...,8]), array([10,...,18])]
scipy.io.savemat('mytable.mat', mdict={'mattable':pyTable})
但是当我尝试将17373个numpy数组存储到列表中时,我的内存不足。
因此,现在我尝试在每次文件访问时都写入.mat文件(即,打开.nc文件,提取感兴趣的(1x24)numpy数组,然后将该行写到变量{{1} mattable
中的},移至下一个文件,提取感兴趣的(1x24)numpy数组,并将其写到mytable.mat
中,依此类推)。
我尝试使用this堆栈溢出答案中的代码:
mattable
但是代码生成了一个.mat文件,该文件无法加载到Matlab环境中。 Matlab控制台中显示以下错误:
???使用==>加载时出错无法读取MAT文件 C:\ path \ to \ mytable.mat 文件可能已损坏。