Wie kann man in Cython leere numpy Arrays vom Typ int
machen? Die folgenden Werke für mich für doppelte oder float Arrays:Wie initialisiert man Integer-Numpy-Arrays fester Größe in Cython?
# make array of size N of type float
cdef np.ndarray[float, ndim=1] myarr = np.empty(N)
# make array of size N of type int
cdef np.ndarray[int, ndim=1] myarr = np.empty(N)
Allerdings, wenn ich versuche, mit int das Gleiche zu tun, ist es nicht:
# this fails
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N)
# wanted to set first element to be an int
myarr[0] = 5
es den Fehler gibt:
Valueerror : Puffer dtype Mismatch, erwartet 'int', aber bekam 'doppelt'
Da anscheinend np.empty()
ein Doppel zurückgibt. Ich habe versucht:
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N, dtype=int)
aber es gibt den gleichen Fehler. Wie kann das gemacht werden?
Warum funktioniert das nicht mit plain 'int' oder nur' np.int' im Gegensatz zu 'np.int32_t'? – user248237dfsf
Das Typargument der ndarray-Deklaration muss ein C-Typ sein, kein Python-Objekttyp. Wenn Sie in die numplige Cython-Header-Datei 'numpy.pxd' schauen, werden Sie feststellen, dass' np.int32_t' letztendlich zur Deklaration 'signed int' führt. –
könnten Sie erklären, warum Sie 'dtype = np.int' und nicht' dtype = np.int32_t' verwenden, wenn Sie 'np.empty' aufrufen? Letzteres funktioniert nicht – user248237dfsf