Ich arbeite an einem Python -Projekt, bei dem SWIG den Hauptpython -Code mit einem C ++ - Modul verbindet. Ich habe kürzlich der C ++ - Bibliothek eine neue Funktion hinzugefügt, aber in Funktionen mit @numpy.Vectorize Dekorateur löst die neue Funktion einen TypenError aus, wenn einer der Eingänge ein numpy Array von Typ numpy.float64 ist als einer der Eingänge. Ich habe beobachtet, dass vektorisierte Funktionen den ersten Eintrag in einer solchen Array -Eingabe automatisch als numpy.float64 aufrufen Python float .
Code: Select all
@np.vectorize
def test(mu):
print(mu,type(mu))
test(np.array([6.2, 67.3]))
< /code>
6.2
6.2
67.3
< /code>
However, older C++ functions called from vectorized functions do not cause this problem, even in a function that also calls one of the new C++ functions and looks somewhat like:
@np.vectorize
def eps(t,mu):
if t > 0:
return cpplib.old_func(mu)
else:
return cpplib.new_func(mu)
< /code>
Both C++ functions accept a double
Eingabe und geben Sie eine Doppel aus. Ich beobachte keine offensichtlichen Unterschiede in den alten und neuen C ++-Funktionen, ihren Instanzen in der .H -Datei des Verzeichnisse . Kompilierungsfehler. Ich weiß nur, dass das Fixieren von Syntaxfehlern in der C ++ - Bibliothek das
Problem nicht verschwindet.