Массивы Matlab в SciPy
NumPy предоставляет способ сохранять данные в формате, читаемом Python.
SciPy предоставляет методы для взаимодействия с Matlab.
Модуль scipy.io библиотеки SciPy предоставляет множество функций для обработки массивов Matlab.
Экспорт данных в формате Matlab
savemat()Метод может экспортировать данные в формате Matlab.
Параметры метода:- filename- Имя файла для сохранения данных.
- mdict- Словарь, содержащий данные.
- do_compression- Логическое значение, указывающее, сжимаются ли результирующие данные. По умолчанию — False.
Экспортируйте массив в mat-файл как переменную "vec":
Пример
import numpy as np
arr = np.arange(10)
io.savemat('arr.mat', {"vec": arr})
Примечание:Приведённый выше код сохраняет файл с именем "arr.mat" на вашем компьютере.
Импорт данных в формате Matlab
Метод loadmat() может импортировать данные в формате Matlab.
Параметры метода:
- filename- Имя файла сохранённых данных.
Возвращает структурированный массив, ключами которого являются имена переменных, а соответствующими значениями — значения переменных.
Следующий пример импортирует массив из mat-файла:
Пример
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# Экспорт
io.savemat('arr.mat', {"vec": arr})
# Импорт
mydata = io.loadmat('arr.mat')
print(mydata)
Возвращаемый результат выглядит следующим образом:
{
'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Tue Sep 22 13:12:32 2020',
'__version__': '1.0',
'__globals__': [],
'vec': array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
}Использование имени переменной "vec" для отображения только массива данных matlab:Пример
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# Экспорт
io.savemat('arr.mat', {"vec": arr})
# Импорт
mydata = io.loadmat('arr.mat')
print(mydata['vec'])
Возвращаемый результат выглядит следующим образом:
[[0 1 2 3 4 5 6 7 8 9]]
Из результата видно, что массив изначально был одномерным, но при извлечении он получает дополнительное измерение и становится двумерным массивом.
Чтобы решить эту проблему, можно передать дополнительный параметр.squeeze_me=True:
Пример
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9,])
# Экспорт
io.savemat('arr.mat', {"vec": arr})
# Импорт
mydata = io.loadmat('arr.mat', squeeze_me=True)
print(mydata['vec'])
Возвращаемый результат выглядит следующим образом:
[0 1 2 3 4 5 6 7 8 9]Другие расширения