2009-07-07 10 views
36

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

Спасибо!

+0

спасибо всем за замечательные советы! Это сработало! – 2009-07-08 19:30:37

ответ

4

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

+0

Я попытался включить ссылку на csvread (http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/csvread.html&http://www. google.com/search?hl=ru&rlz=1C1GGLS_en-USUS294US304&q=matlab+csvread&aq=f&oq=&aqi=) в ответе. – Jacob

55

Если вы используете 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 модуле.) См latest documentation for more detail

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

+1

Эта ссылка, похоже, не работает для меня. Возможно, это будет работать лучше: http: //docs.scipy.org/doc/scipy/reference/generated/scipy.io.savemat.html – gnovice

+0

Ссылка работает отлично на моем конце. Но ваша ссылка лучше - это для последних документов (0,7+), тогда как у меня было 0,6, следовательно, у другого модуля (у меня есть старая закладка). Спасибо, гновиц! – ars

+0

Рад помочь! =) – gnovice

6

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

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

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

8

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

Вы можете использовать команду синтаксис формы НАГРУЗКИ:

load c:/tmp/arrdata.mat 

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

filePath = 'c:/tmp/arrdata.mat'; 
data = load(filePath); 
+1

+1; Ухоженная! Я не использую Matlab достаточно и всегда оказываюсь в меню, вместо того, чтобы просто искать правильную команду. Загрузка показалась бы очевидной. Гм. :-) – ars

3

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

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

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

0

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

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

Смежные вопросы