Was ist der beste Weg, um ein numpy Array in Cython zu deklarieren, wenn es in der Lage sein sollte, sowohl float als auch double zu behandeln?Wie deklariert man ein NDarray in Cython mit einem allgemeinen Gleitkommatyp
Ich denke, dass es mit einer Speicheransicht nicht möglich sein wird, da dort der Datentyp entscheidend ist, aber für ein ndarray gibt es eine Möglichkeit, es einen allgemeinen Float-Typ zu geben, der immer noch von der Schnelligkeit von Cython profitieren würde?
so ist es das, was ich würde usualy tun:
def F(np.ndarray A):
A += 10
Ich habe gesehen, dass es auch ist:
def F(np.ndarray[np.float32_t, ndim=2] A):
A += 10
aber das wird wieder ein wenig Größe für die Art geben. Ich habe auch daran gedacht, eine Speicheransicht innerhalb der Funktion abhängig von der Bitgröße (32 oder 64) zu erstellen.
Jeder Gedanke für die Spitze so viel Danke sehr geschätzt
auf dem floating
Typ. Ich habe es versucht, wie diese
import numpy as np
cimport numpy as np
import cython
cimport cython
from libc.math cimport sqrt, abs
from cython cimport floating
@cython.boundscheck(False)
@cython.wraparound(False)
@cython.nonecheck(False)
def Rot_Matrix(np.ndarray[floating, ndim=3] Fit_X,
np.ndarray[floating, ndim=3] Ref_X,
weight = None):
cdef:
unsigned int t, T = Fit_X.shape[0]
unsigned int n, N = Fit_X.shape[1]
np.ndarray[floating, ndim=3] Rot = np.empty((T,3,3))
return Rot
, wenn ich jetzt die Funktion mit zwei Reihen von np.float32 nenne ich den Fehler
ValueError: Buffer dtype mismatch, expected 'float' but got 'double'
Wenn ich nicht das die Typdefinition in den Bremsen für Rot
so liest es np.ndarray[floating, ndim=3] Rot = np.empty((T,3,3))
dann bekomme ich Ndray zurück und es funktioniert gut. Hättest du zufällig einen Zeiger für mich, was ich falsch mache?
Ich bezweifle, dass Sie native Typen unterschiedlicher Größen mischen können, würde es die Leistung blasen. – CoDEmanX
Sie würden es also einfach so lassen wie im ersten Beispiel? Würde es helfen, die Anzahl der Dimensionen zu deklarieren? – Magellan88
@ Magellan88 Ich habe gerade das Update auf Ihren Post gesehen. Ich habe meine Antwort aktualisiert. – Veedrac