So übergeben Sie ein numpy-Array mit Zeichenfolgentypen an eine Funktion in Cython

Übergabe eines numpy-Arrays von dtypenp.float64_t funktioniert gut (siehe unten), aber ich kann keine String-Arrays übergeben.

Das funktioniert:

# cython_testing.pyx
import numpy as np
cimport numpy as np

ctypedef np.float64_t dtype_t 

cdef func1 (np.ndarray[dtype_t, ndim=2] A):
    print A 

def testing():
    chunk = np.array ( [[94.,3.],[44.,4.]], dtype=np.float64)

    func1 (chunk)

Aber ich kann das nicht zum Laufen bringen: Ich kann die passenden 'Typenkennungen' für numpy string dtypes nicht finden.

# cython_testing.pyx
import numpy as np
cimport numpy as np

ctypedef np.string_t dtype_str_t 

cdef func1 (np.ndarray[dtype_str_t, ndim=2] A):
    print A 

def testing():
    chunk = np.array ( [['huh','yea'],['swell','ray']], dtype=np.string_)

    func1 (chunk)

Der Kompilierungsfehler ist:

Error compiling Cython file:
------------------------------------------------------------
ctypedef np.string_t dtype_str_t 
    ^
------------------------------------------------------------

cython_testing.pyx:9:9: 'string_t' is not a type identifier

AKTUALISIEREN

Per schaut durchnumpy.pxdIch sehe folgendesctypedef Aussagen. Vielleicht reicht das, um zu sagen, dass ich es gebrauchen kannuint8_t und so tun, als wäre alles normal, solange ich ein Casting machen kann?

ctypedef unsigned char      npy_uint8
ctypedef npy_uint8      uint8_t

Ich muss nur sehen, wie teuer das Casting sein wird.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage