Загрузите файл .mat, включая строковый массив, в Python 3.6. - PullRequest
3 голосов
/ 07 января 2020

У меня есть файл .mat, который содержит два массива DateTime в строковом формате. Массивы имеют вид:

A = ["15-Nov-2014 22:42:16",
         "16-Dec-2014 04:14:07",
         "20-Jan-2015 17:05:32"]

Я сохранил два массива String в файле .mat. Я попытался загрузить их в Python с помощью этой команды:

import hdf5storage
Input = hdf5storage.loadmat('Input.mat')

или этой команды:

import scipy
Input = scipy.io.loadmat('Input.mat')

Оба приводят к чтению словаря в Python, что ожидается, но я не может видеть имя двух массивов в качестве ключей словаря.

Есть идеи?

1 Ответ

4 голосов
/ 07 января 2020

Я рекомендую вам преобразовать строки в символьные массивы.

Очевидно, что не существует документированного решения для чтения строк MATLAB из хранилища HDF5 (строки MATLAB являются объектами с недокументированным внутренним форматом хранения).

Сохранение массива символов в Input.mat в MATLAB (не в формате HDF5):

A = ["15-Nov-2014 22:42:16"; "16-Dec-2014 04:14:07"; "20-Jan-2015 17:05:32"];

% Convert A from array of strings to 2D character array.
% Remark: all strings must be the same length
A = char(A); % 3*20 char array

% Save A to mat file (format is not HDF5).
save('Input.mat', 'A');

Чтение A в Python с использованием scipy.io.loadmat:

from scipy import io

# Read mat file
Input = io.loadmat('Input.mat')  # Input is a dictioanry {'A': array(['15-Nov-2014 ...pe='<U20'), ...}

# Get A from Input (A stored in MATLAB - character arrays in MATLAB are in type utf-16)
A = Input['A'];  # A is 2D numpy array of type '<U20' array(['15-Nov-2014 22:42:16', '16-Dec-2014 04:14:07', ...], dtype='<U20')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...