2016-10-27 7 views
1

Ich rufe von Matlab (R2015b) ein Python-Modul, das ich erstellt habe. Jetzt ist mir aufgefallen, dass wir nur einen 1xN Vektor an Python senden können.Python-NDarray in Matlab-Matrix konvertieren

So fixierte ich dies in Matlab

Matlab-Code:

a = ones(3, 3); 
a = a(:).'; 

Dann a als Parameter Python Funktion, die ich geschickt.

m = py.computeCoreset.computecoreset(a, obj.coresetSize); 

Nun mein Problem, dass Python nicht Matlab zurückkehrt Matrix bemerkte ich, dass ich eine ndarray bin wieder beim Debuggen.

Das ist mein Python-Code:

import numpy as np 


def computecoreset(mat, coresetSize): 
    return np.random.choice(mat, coresetSize) 

Ich glaube, ich muss einmal die ndarray eine Matrix machen wieder

Aber wie ich es konvertieren?

Vielen Dank im Voraus!

+0

aufgeführt ist Was passiert, wenn Sie das Funktion, die du zeigst? –

+0

Ihr Python-Code gibt offensichtlich ein numpy-Array zurück, aber erzeugt der Interface-Code nicht irgendeine Art von MATLAB-Objekt? Ein numpy Array kann in einer MATLAB-Umgebung nicht existieren. Erläutern Sie, wie Sie den Python-Code von MATLAB aufrufen. – hpaulj

Antwort

2

https://www.mathworks.com/matlabcentral/answers/157347-convert-python-numpy-array-to-double

Die akzeptierte Antwort schlägt py.array.array Funktion:

data = double(py.array.array('d',py.numpy.nditer(x))); 

die auch auf

https://www.mathworks.com/help/matlab/matlab_external/handling-data-returned-from-python.html

+0

Ich denke, der Punkt der Verwendung von "nditer (x)" ist, die Elemente von "x" in eine 1-d-Sequenz zu serialisieren. In diesem Fall ist "x" 1-d, also denke ich nicht, dass die Verwendung von "nditer()" notwendig ist. –

1

Dies ist ein Schuss im Dunkeln, weil ich Matlab nicht habe, um es zu testen, aber ich vermute, dass Sie ein Python array Objekt, nicht ein numpy Array zurückgeben müssen. So etwas wie folgt aus:

import numpy as np 
import array 


def computecoreset(mat, coresetSize): 
    c = np.random.choice(mat, coresetSize) 
    return array.array('d', c)