С npz
, который у меня есть из более раннего SO:
In [491]: data = np.load('test.npz')
In [492]: list(data.keys())
Out[492]: ['arr_0', 'arr_1', 'arr_2']
In [493]: data['arr_0']
Out[493]:
array([[1., 1., 1.],
[1., 1., 1.]])
In [494]: data['arr_1']
Out[494]:
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
In [495]: data['arr_2']
Out[495]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
data
- это объект, подобный dict
. Таким образом, его можно передать как параметр mdict
в savemat
(который также ожидает dict):
In [496]: io.savemat('data.dat', data)
проверить сохранение:
In [497]: io.loadmat('data.dat')
Out[497]:
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sun Aug 2 17:16:18 2020',
'__version__': '1.0',
'__globals__': [],
'arr_0': array([[1., 1., 1.],
[1., 1., 1.]]),
'arr_1': array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]),
'arr_2': array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])}
в качестве альтернативы мы могли бы сделать наш собственный dict
In [498]: io.savemat('data.dat', mdict={'x':data['arr_0'], 'y':data['arr_1']})
In [499]: io.loadmat('data.dat')
Out[499]:
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sun Aug 2 17:19:06 2020',
'__version__': '1.0',
'__globals__': [],
'x': array([[1., 1., 1.],
[1., 1., 1.]]),
'y': array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])}
Ключ в том, чтобы понять, что np.load
для npz
возвращает dict
, из которого мы можем загружать фактические массивы. Это dict
не является данными. Точно так же savemat
ожидает dict
массивов. Поскольку оба работают с dicts, нам не нужно явно загружать массивы.