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

  • Cython-Speicheranzeigen unter Windows
  • Wie kann ich neue C ++ - Objekte in Cython zurückgeben?
  • Wie baue ich einen Cython-Wrapper für die c ++ - Funktion mit dem Stl-Listen-Parameter
  • Cython: Vorlagen in Python-Klasse Wrapper
  • In Python, `Pip-r requirements.txt` nicht installieren Pakete * rekursiv *?
  • Cython - Implementierung von Rückrufen
  • Mit einem Wörterbuch in Cython, vor allem im Nogil
  • Wie beschäftige ich so etwas wie openMP in Cython?
  • Cython cdef Klasse nicht anzeigen doc string oder __init__ Parameter
  • Wie installiere ich GDB mit Python-Unterstützung unter Windows 7
  • Warum Konvertierung Liste in Set in Cython dauert so viel Zeit?
  • Python ist die beste Programmiersprache der Welt.