Cython Memoryviews – Von Array von Structs?

Ich möchte schnell mit so wenigen Exemplaren wie möglich eine lange Reihe von Strukturen füllen, die ich schrittweise von C bekomme.

Wenn meine struct nur primäre Datentypen sind, wie die folgenden:

cdef packed struct oh_hi: int lucky char unlucky 

Dann funktioniert das folgende:

  DEF MAXPOWER = 1000000 cdef oh_hi * hi2u = <oh_hi *>malloc(sizeof(oh_hi)*MAXPOWER) cdef oh_hi [:] hi2me = <oh_hi[:MAXPOWER]> hi2u 

Aber sobald ich meine Struktur ändern, um ein Zeichen-Array zu halten:

 cdef packed struct oh_hi: int lucky char unlucky[10] 

Die vorherige Memoryview Casting kompiliert aber wenn Run gibt ein:

  ValueError: Expected 1 dimension(s), got 1 

Gibt es eine einfache Möglichkeit, dies in Cython zu tun? Ich bin mir bewusst, dass ich ein strukturiertes Array erstellen könnte, aber afaik, das würde mir nicht erlauben, die C-Strukturen direkt hineinzugeben.

One Solution collect form web for “Cython Memoryviews – Von Array von Structs?”

Eigentlich, nur das Erstellen einer strukturierten numpy Array und dann ein Memoryview funktioniert ganz gut.

 cdef np.ndarray hi2u = np.ndarray((MAXPOWER,),dtype=[('lucky','i4'),('unlucky','a10')]) cdef oh_hi [:] hi2me = hi2u 

Die Leistung von diesem scheint ziemlich gut und das spart eine spätere Kopie, wenn Sie die Daten wieder in Python benötigen. Wie üblich, ist die numpy Version ziemlich gut. = P

  • Ich kann beim Öffnen eines Objekts nicht __dealloc__ aufgerufen werden
  • Cython shared memory in cython.parallel.prange - block
  • Überprüfen der Kompatibilität bei der Erstellung von Erweiterungstypen und deren Verwendung mit cdef
  • Wrapping C-Bibliothek
  • Kann Cython zu einer EXE kompilieren?
  • Ld.exe: kann nicht finden -lvcruntime140 beim Kompilieren vorher arbeiten Cython-Modul auf neue 3.5 installieren
  • Cython-Crash aus Dokumentationsbeispiel
  • Verteilen von Cython-basierten Erweiterungen mit LAPACK
  • Wie rufe ich eine Multi-Thread-C-Funktion in Cython an?
  • Wie kann ich git version info in cython-built .so Datei hinzufügen?
  • Cython cdef Klasse nicht anzeigen doc string oder __init__ Parameter
  • Python ist die beste Programmiersprache der Welt.