将Python的.npz文件保存为MATLAB的.mat文件

3

我有一个.npz文件,想要保存成.mat文件。

A.npz文件包含A['arr_0', 'arr_1', 'arr_2']

目前,我正在使用以下方法逐个保存:

import scipy.io as sio
a1 = A['arr_0']
sio.savemat('a1.mat', mdict={'a1': a1}

对于A.npz中的每个arr_i,是否有一种简单的方法将所有内容保存为.mat(即通过单元格格式)?还是我应该创建一个脚本来像循环一样简单地保存它们?


鉴于您提供了这两个选项,我假设您已经尝试过两种方法,因此知道哪一种更快和/或更适合您的用例。那么你的问题是什么? - Adriaan
有没有一个简单的命令可以将整个 A.npz 数据集保存到单个 .mat 文件中,而不需要通过循环脚本进行操作?抱歉,我以为我表达得很清楚了。我是 Python 的新手,所以我不确定我是否遗漏了一些基础知识。 - Shinobii
很遗憾,这个问题不适合在这里讨论。我们帮助解决具体的编程问题,而不是设计问题或文档请求(这就是它所归结的)。 - Adriaan
感谢您的帮助。 - Shinobii
你需要将每个数组从npz中加载到内存中(npz是一个惰性加载器)。然后,你可以将所有的数组保存到mat中作为多项字典。 - hpaulj
2个回答

3
创建一个npz文件:
In [147]: np.savez('test.npz',x=np.arange(3),y=np.ones((3,3)),z=np.array(3))

加载; data 是文件/变量的字典; 通过索引进行加载:

In [148]: data = np.load('test.npz')
In [149]: list(data.keys())
Out[149]: ['z', 'y', 'x']
In [150]: data['x']
Out[150]: array([0, 1, 2])

将类似的字典保存为.mat文件:

In [151]: io.savemat('a1.mat', mdict={'x':data['x'],'y':data['y'],'z':data['z']})
In [152]: io.loadmat('a1.mat')
Out[152]: 
{'__globals__': [],
 '__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Thu Feb 15 09:52:42 2018',
 '__version__': '1.0',
 'x': array([[0, 1, 2]]),
 'y': array([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]]),
 'z': array([[3]])}

替代结构:

io.savemat('a1.mat', mdict={key:data[key] for key in data.keys()})

甚至更多:
io.savemat('a1.mat', mdict=data)

由于data是一个字典。


1
似乎load字典可以直接传递给loadmat - hpaulj

1

用于shell脚本等的一行代码:

python -c "import pylab, scipy.io; scipy.io.savemat('tmp.mat', pylab.np.load('tmp.npz'))"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接