Die Antwort von Pierre GM ist großartig, solange Ihre Funktion ausschließlich ufuncs (oder etwas Ähnliches) verwendet, um die Eingabewerte implizit zu durchlaufen. Wenn Ihre Funktion über die Eingaben iterieren muss, tut np.asarray
nicht genug, weil Sie nicht über einen NumPy-Skalar iterieren können:
%Vor%
Wenn Ihre Funktion über die Eingabe iterieren muss, funktioniert etwa Folgendes: np.atleast_1d
und np.squeeze
(siehe Array Manipulationsroutinen - NumPy Manual ). Ich habe ein Argument aaout
("Always Array OUT") eingefügt, damit Sie angeben können, ob skalare Eingänge für die Ausgabe von Einzelelement-Arrays verwendet werden sollen. Es könnte fallen gelassen werden, wenn es nicht benötigt wird:
%Vor%
Natürlich sollten Sie zur Potenzierung nicht explizit wie hier iterieren, aber eine komplexere Operation kann nicht mit NumPy ufuncs ausgedrückt werden. Wenn Sie not nicht iterieren müssen, aber eine ähnliche Kontrolle darüber haben möchten, ob Skalareingaben Einzelelement-Array-Ausgaben erzeugen, könnte die Mitte der Funktion einfacher sein, aber die Rückkehr muss mit np.atleast_1d
umgehen:
%Vor%
Ich vermute, dass in den meisten Fällen das Flag aaout
nicht notwendig ist und dass Sie immer skalare Ausgaben mit skalaren Eingaben wünschen. In solchen Fällen sollte die Rückgabe nur lauten:
%Vor%