2017-01-17 6 views
-1

Ich möchte einige Python-Code von MATLAB aufrufen, um dies zu tun, muss ich ein Matrixobjekt zu einem NumPy ndarray, über die MATLAB-Funktion py.numpy.array konvertieren. Das einfache Übergeben des Matrixobjekts an die Funktion funktioniert jedoch nicht. Im Moment habe ich das Problem gelöst, indem ich die Matrix in ein Zellen-Objekt umgewandelt habe, das die Zeilen der Matrix enthält. Zum BeispielKonvertieren eines MATLAB Matrixobjekts in ein Python NumPy Array

function ndarray = convert(mat) 
    % This conversion fails 
    ndarray = py.numpy.array(mat) 

    % This conversion works 
    cstr = cell(1, size(mat, 1)); 
    for row = 1:size(mat, 1) 
     cstr(row) = {mat(row, :)}; 
    end 
    ndarray = py.numpy.array(cstr); 

Ich fragte mich, ob es eine effizientere Lösung gibt.

+0

Denken Sie daran, Sie können Vektor nur von Matlab zu Python senden. '1XN' In' file.py' konvertieren Sie es in ein numpy ndarray. –

+0

Welche Versionen von MATLAB und Python verwenden Sie? Was sind die Dimensionen des Arrays? Bitte geben Sie auch eine [mcve] in Ihrer Frage an. –

+0

@TonyTannous tatsächlich denke ich, dass die Verwendung von Zellen von Zellen in numpy als 'MxN'' ndarray' richtig interpretiert wird. – AreTor

Antwort

1

Array Unter der Annahme, enthält double Werte, der Fehler sagt uns genau das, was wir tun sollten:

A = magic(3); 
%% Attempt 1: 
try 
npA = py.numpy.array(A); 
% Result: 
% Error using py.numpy.array 
% Conversion of MATLAB 'double' to Python is only supported for 1-N vectors. 
catch 
end 
%% Attempt 2: 
npA = py.numpy.array(A(:).'); 
% Result: OK! 

Dann:

>> whos npA 
    Name  Size   Bytes Class    Attributes 

    npA  1x1     8 py.numpy.ndarray 

Danach können Sie numpy.reshape verwenden wieder die ursprüngliche Form zu bringen, entweder direkt in MATLAB oder in Python.

+0

Eigentlich denke ich, dass dies die effizienteste Lösung ist, aber es muss das 'ndarray' in Python umgestalten, und das ist nicht immer direkt möglich. Wenn die Umgestaltung nicht möglich ist, denke ich, dass meine Lösung besser ist. – AreTor

+0

Ich muss meine vorherige Aussage korrigieren, ich dachte nicht, dass die NumPy-Umformung direkt in MATLAB über 'npA = npA.reshape (Größe (A, 1), Größe (A, 2)) 'erfolgen kann. – AreTor

+0

@AreTor Danke. Ich habe die Antwort aktualisiert, um diese Möglichkeit zu verdeutlichen. –

Verwandte Themen