Матрица от Python до MATLAB

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

Спасибо!

Ответы

Ответ 1

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

import numpy, scipy.io

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

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

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

Примечание: я сделал это на scipy 0.7.0. (у scipy 0.6 есть savemat в модуле scipy.io.mio.) Более подробную информацию смотрите в последней документации

ОБНОВЛЕНИЕ: обновленная ссылка благодаря @gnovice.

Ответ 2

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

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

load c:/tmp/arrdata.mat

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

Панель инструментов npy-matlab может считывать двоичные файлы *.npy в MATLAB. Файлы *.npy можно напрямую экспортировать с помощью модуля NumPy. Из документации:

>> a = rand(5,4,3);
>> writeNPY(a, 'a.npy');
>> b = readNPY('a.npy');
>> sum(a(:)==b(:))
ans =

    60

npy-matlab - это простая коллекция M файлов , доступных на GitHub, с лицензией BSD из 2 пунктов.