Массивы Matlab в SciPy

NumPy предоставляет способ сохранять данные в формате, читаемом Python.

SciPy предоставляет методы для взаимодействия с Matlab.

Модуль scipy.io библиотеки SciPy предоставляет множество функций для обработки массивов Matlab.

Экспорт данных в формате Matlab

savemat()Метод может экспортировать данные в формате Matlab.

Параметры метода:
  • filename- Имя файла для сохранения данных.
  • mdict- Словарь, содержащий данные.
  • do_compression- Логическое значение, указывающее, сжимаются ли результирующие данные. По умолчанию — False.

Экспортируйте массив в mat-файл как переменную "vec":

Пример

from scipy import io
import numpy as np

arr = np.arange(10)

io.savemat('arr.mat', {"vec": arr})

Примечание:Приведённый выше код сохраняет файл с именем "arr.mat" на вашем компьютере.

Импорт данных в формате Matlab

Метод loadmat() может импортировать данные в формате Matlab.

Параметры метода:

  • filename- Имя файла сохранённых данных.

Возвращает структурированный массив, ключами которого являются имена переменных, а соответствующими значениями — значения переменных.

Следующий пример импортирует массив из mat-файла:

Пример

from scipy import io
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:

Пример

from scipy import io
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:

Пример

from scipy import io
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]
Другие расширения