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...