Mehrdimensionale Arrays von c++ -> python mittels ctypes



  • Hallo

    Ich hoffe ich bin hier im richtigen Forum 😉
    Ich möchte ein mehrdimensionales Array von C++ an Python zurückgeben indem ich ctypes verwende. Hier mal mein Code:

    #define DLL extern "C" _declspec(dllexport)
    
    DLL float** func()
    
    // Anzahl und pyIMG definieren
    
    float** ary = new float*[Anzahl];
    		for (size_t i = 0; i < Anzahl; i++)
    			ary[i] = new float[3];
    
    		for (size_t j = 0; j< Anzahl; j++)
    		{
    			ary[j][0] = (pyIMG[j].x);
    			ary[j][1] = (pyIMG[j].y);
    			ary[j][2] = (pyIMG[j].z);
    
    		}
    return ary;
    

    Python:

    from ctypes import *
    from numpy.ctypeslib import ndpointer
    lib = cdll.LoadLibrary("C:\\Users\\...\\Test.dll")
    lib.func.restype = ndpointer(dtype=c_float, shape=(Anzahl))
    img = lib.func()
    

    Das Ziel wäre das Array dann in Python als numpy array zu speichern, ohne dabei ineffiziente for-Schleifen in Python zu verwenden. Ich schaffe es aber nicht dieses 2-dimensionale Array richtig an Python zu übergeben... ich denke der Fehler liegt bei der Definition des "restype"... aber ich finde nicht heraus wie ich den type richtig definiere... 😕
    Hat jemand Erfahrung mit c++ -> python mittels ctypes und kann mir bei meiner Fragestellung helfen?

    Vielen Dank
    Gruss Golo



  • Ich kenne mich damit leider nicht aus.

    Allerdings gebe ich zu bedenken, dass du in C++ KEIN 2d-Array erzeugt hast, sondern dass du stattdessen ein Array von Pointern auf Arrays erzeugt hast. Das ist was anderes! Bei einem 2d-Array wie int arr[42][23] liegen die Elemente direkt hintereinander im Speicher, da sind keine Pointer drin.

    Allerdings liefert eine Suche nach ctypes 2d array ziemlich viele StackOverflow-Treffer mit Beispielen. Hast du da schon einmal geguckt?



  • Okey das mit dem Array muss ich nochmals anschauen.

    Ja ich hab auch schon im Google gesucht, aber konnte leider noch nicht viel mit den Antworten anfangen, den ich finde eigentlich nur Beiträge wo ein 2D Array von Python nach C/C++ übergeben wird und nicht umgekehrt. Klar könnte man das dann irgendwie einfach umschreiben aber habs noch nicht hinbekommen...


Anmelden zum Antworten