Матрица из Python в MATLAB

34

Я работаю с Python и MATLAB прямо сейчас, и у меня есть 2D-массив на Python, который мне нужно записать в файл, а затем можно прочитать его в MATLAB в качестве матрицы. Есть идеи, как это сделать?

Спасибо!

Теги:
file-io
matrix
import

7 ответов

47

Если вы используете numpy/scipy, вы можете использовать функцию scipy.io.savemat:

import numpy, scipy.io

arr = numpy.arange(10)
arr = arr.reshape((3, 3))  # 2d array of 3x3

scipy.io.savemat('c:/tmp/arrdata.mat', mdict={'arr': arr})

Теперь вы можете загрузить эти данные в MATLAB, используя File → Load Data. Выберите файл, и в вашей среде будет доступна переменная arr (матрица 3x3).

Примечание. Я сделал это на scipy 0.7.0. (scipy 0.6 имеет savemat в модуле scipy.io.mio.) Подробнее см. новейшую документацию

EDIT: обновленная ссылка благодаря @gnovice.

  • 1
    Эта ссылка, кажется, не работает для меня. Возможно, этот будет лучше работать: docs.scipy.org/doc/scipy/reference/generated/…
  • 0
    Ссылка отлично работает на моем конце. Но ваша ссылка лучше - она для последних документов (0.7+), тогда как у меня была для 0.6, отсюда и другой модуль (у меня старая закладка). Спасибо, gnovice!
7

Я думаю, ars имеет самый прямой ответ для сохранения данных в файл .mat из Python (используя savemat). Чтобы добавить немного к их ответу, вы также можете программно загрузить файл .mat в MATLAB, используя функцию LOAD вместо этого вручную используя меню команд MATLAB...

Вы можете использовать либо синтаксическую форму команды LOAD:

load c:/tmp/arrdata.mat

или форму синтаксиса функции (если у вас есть путь к файлу, хранящийся в строке):

filePath = 'c:/tmp/arrdata.mat';
data = load(filePath);
  • 1
    +1; Ухоженная! Я не использую matlab достаточно, и всегда заканчиваю шарить в меню вместо того, чтобы просто искать правильную команду. Загрузка показалась бы очевидной. Гм. :-)
5

Я написал небольшую функцию, чтобы сделать то же самое, без необходимости numpy. Он принимает список списков и возвращает строку с матрицей в формате MATLAB.

def arrayOfArrayToMatlabString(array):
    return '[' + "\n ".join(" ".join("%6g" % val for val in line) for line in array) + ']'

Напишите "myMatrix = " + arrayOfArrayToMatlabString(array) в файл .m, откройте его в matlab и выполните его.

3

Вы можете написать матрицу в Python в CSV файл и прочитать ее в MATLAB с помощью csvread.

2

Я бы использовал numpy.savetxt('yourfile.mat',yourarray) в Python и затем yourarray = load('yourfile.mat') в MATLAB.

2

Вы также можете вызвать matlab непосредственно из python:

from mlabwrap import mlab
import numpy 
a = numpy.array([1,2,3])
mlab.plot(a)
0

Эта библиотека npy-matlab может читать *.npy двоичные файлы в matlab. *.npy файлы могут быть напрямую экспортированы с помощью модуля numpy.

https://github.com/kwikteam/npy-matlab

Ещё вопросы

Сообщество Overcoder
Наверх
Меню