У меня есть массив комплексных чисел в Matlab, и я хочу импортировать эти данные в Python. Я пробовал все методы, включая модуль Scipy и h5py и т. д. Может ли кто-нибудь подсказать мне другой возможный способ? Моя версия Matlab - 2017b. а версия python - 2.7.





В MATLAB сохраните свои данные с опцией '-v7':
myMat = complex(rand(4), rand(4));
save('myfile', 'myMat', '-v7')
В Python загрузите файл .mat с scipy.io.loadmat. Результатом является изречение Python:
>>> d = scipy.io.loadmat('myfile.mat')
>>> m = d['myMat']
>>> m[0,0]
'(0.421761282626275+0.27692298496088996j)'
и так далее.
Большое спасибо за ваш ответ. Я пробовал этот метод и получаю следующую ошибку: byte_stream, file_opened = _open_file (file_name, appendmat) TypeError: объект 'NoneType' не повторяется
Можете ли вы отредактировать свой вопрос, чтобы показать фактические команды, которые вы используете, и, если возможно, пример данных?
import scipy.io d = scipy.io.loadmat ('myfile.mat') В моем коде Python есть только эти две строки, написанные выше. и моя ошибка: byte_stream, file_opened = _open_file (file_name, appendmat) TypeError: объект 'NoneType' не повторяется
Я получаю данные из Matlab следующим образом: data = read_complex_binary ('galileo_data'); сохранить ('мой файл', 'данные', '-v7');
Работает ли он нормально с данными простого примера из MATLAB, как в моем ответе? Если да, то в ваших данных есть что-то другое, что вам нужно исследовать - можете ли вы показать это на примере? Если даже простой пример не работает, я думаю, что-то не так с вашей установкой Python / scipy. Приведенный выше код работает для меня на MATLAB R2016b и Python 2.7.15 / scipy 1.1.0.
он также не работает с упомянутыми вами простыми данными. тогда может быть я попробую переустановить scipy.
Вам необходимо отобразить полное сообщение об ошибке loadmat (трассировка). Я загрузил много файлов .mat с помощью loadmat и ответил на ряд вопросов. Я раньше не видел этого сообщения об ошибке, но это заставляет меня подозревать, что проблема в том, что Python открывает файл. Он даже не доходит до этапа чтения и разбора содержимого файла.
Зачем нужен другой способ?
scipy.io.loadmatсделает всю работу за вас. Однако, поскольку у вас есть более новая версия MATLAB, вам может понадобиться библиотека HDF5 Python. Чтобы избежать этого, сохраните файл MATLAB MAT, используя v7.2 или меньше. В качестве альтернативы, если у вас есть просто массив чисел, рассмотрите возможность кодирования его в JSON с использованиемjsonencodeв MATLAB, а затем используйте библиотекуjsonв Python для чтения данных в качестве словаря, который вы можете преобразовать в массив NumPy. Это окольный способ делать то, что вы хотите, но он позволяет избежать использования scipy целиком.