如何使用scipy.io.savemat()将值(多个numpy数组)添加到现有Matlab变量(在.mat文件中)以创建表?

时间:2019-03-07 10:13:53

标签: python arrays matlab numpy

上下文

我得到了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   文件可能已损坏。

0 个答案:

没有答案