Ich versuche eine Funktion f (x) zu definieren, die 1.0 für x = 0 und 1.0/(2j pi x) ergibt. Hier ist ein ‚Test‘ Skript Ich verwende:Eine komplexwertige, stückweise Funktion definieren
import numpy as np
def f(x):
return np.piecewise(x,[x==0],[1.0, lambda x: 1.0/(2j*np.pi*x)])
x = np.linspace(-1,1,21)
print(x)
print(f(x))
Wenn die Lambda-Funktion nicht komplexwertigen ist, das funktioniert, wie ich erwarten würde. Doch mit dem „2j“ Begriff erhalte ich die folgende Warnung und Ausgang:
/usr/local/lib/python2.7/dist-packages/numpy/lib/function_base.py:1144: ComplexWarning: Casting complex values to real discards the imaginary part
y[condlist[k]] = item(vals, *args, **kw)
[-1. -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0. 0.1 0.2 0.3 0.4
0.5 0.6 0.7 0.8 0.9 1. ]
[-0. -0. -0. -0. -0. -0. -0. -0. -0. -0. 1. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0.]
Offenbar numpy ist piecewise
nimmt automatisch den Realteil. Ist das nicht eine Einschränkung von piecewise
? Gibt es eine andere Möglichkeit, stückweise komplexwertige Funktionen zu definieren (ohne den Real- und den Imaginärteil getrennt definieren zu müssen)?
das funktioniert, danke! (Ich habe schließlich 'x = x + 0j' als erste Zeile der Funktionsdefinition eingefügt). –