Matrix van Python naar MATLAB

Ik werk nu met Python en MATLAB en ik heb een 2D-array in Python die ik naar een bestand moet schrijven en het vervolgens als een matrix in MATLAB kan inlezen. Om het even welke ideeën over hoe dit te doen?

Bedankt!


Antwoord 1, autoriteit 100%

Als je numpy/scipy gebruikt, kun je de functie scipy.io.savematgebruiken:

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})

Nu kunt u deze gegevens in MATLAB laden met behulp van Bestand -> Gegevens laden. Selecteer het bestand en de variabele arr(een 3×3-matrix) is beschikbaar in uw omgeving.

Opmerking: ik deed dit op scipy 0.7.0. (scipy 0.6 heeft savematin de scipy.io.miomodule.) Zie de laatste documentatie voor meer details

EDIT: bijgewerkte link dankzij @gnovice.


Antwoord 2, autoriteit 12%

Ik denk dat arshet meest duidelijke antwoord heeft voor de gegevens opslaan in een .mat-bestand vanuit Python (met behulp van bewaarmat). Om een ​​klein beetje aan hun antwoord toe te voegen, kunt u het .mat-bestand ook programmatisch in MATLAB laden met behulp van de LOADfunctie in plaats van het met de hand te doen met behulp van het MATLAB-opdrachtvenstermenu…

U kunt de commandosyntaxis-vorm van LOAD:

. gebruiken

load c:/tmp/arrdata.mat

of het functiesyntaxis-formulier (als u het bestandspad in een tekenreeks hebt opgeslagen):

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

Antwoord 3, autoriteit 8%

Ik heb een kleine functie geschreven om hetzelfde te doen, zonder dat er numpy nodig is. Het neemt een lijst met lijsten en retourneert een string met een MATLAB-geformatteerde matrix.

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

Schrijf "myMatrix = " + arrayOfArrayToMatlabString(array)naar een .m-bestand, open het in matlab en voer het uit.


Antwoord 4, autoriteit 7%

Ik zou waarschijnlijk numpy.savetxt('yourfile.mat',yourarray)gebruiken in Python
en dan yourarray = load('yourfile.mat')in MATLAB.


Antwoord 5, autoriteit 5%

Je zou de matrix in Python naar een CSV-bestand kunnen schrijven en deze in MATLAB kunnen lezen met csvread.


Antwoord 6, autoriteit 5%

De toolbox npy-matlabkan *.npybinaire bestanden in MATLAB inlezen. *.npybestanden kunnen direct geëxporteerd worden met de NumPy module. Uit de documentatie:

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

npy-matlabis een eenvoudige verzameling M-bestanden beschikbaar op GitHub , met een 2-clause BSD-licentie.

Other episodes