Grundstück Piecewise-Funktion in Python
Ich möchte zeichnen Sie die folgende stückweise Funktion in Python mit Matplotlib, von 0 bis 5.
f(x) = 1, x != 2; f(x) = 0, x = 2
In Python...
def f(x):
if(x == 2): return 0
else: return 1
Mithilfe von NumPy ich ein array erstellen,
x = np.arange(0., 5., 0.2)
array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ,
2.2, 2.4, 2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2,
4.4, 4.6, 4.8])
Ich habe versucht, Dinge wie...
import matplotlib.pyplot as plt
plt.plot(x,f(x))
... Oder
vecfunc = np.vectorize(f)
result = vecfunc(t)
... Oder
def piecewise(x):
if x == 2: return 0
else: return 1
import matplotlib.pyplot as plt
x = np.arange(0., 5., 0.2)
plt.plot(x, map(piecewise, x))
ValueError: x and y must have same first dimension
Aber ich bin nicht mit dieser richtig funktioniert, und bin jetzt nur zufällig zu raten, wie dies zu tun.
Einige Antworten ab, um es... Aber die Punkte sind verbunden in einer Linie auf dem Grundstück. Wie wir Plotten die Punkte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass die Funktion
f
nicht ein array als Eingabe, sondern eine einzelne Zahl. Sie können:Den
map
Funktion nimmt eine Funktionf
, ein arrayx
und gibt ein weiteres array, in dem die Funktionf
angewendet auf jedes element des array.ValueError: x and y must have same first dimension
plt.plot
muss ein array oder eine Liste, nicht einen generator (das ist, wasmap
gibt), verwenden Sie :plt.plot(x, list(map(piecewise, x)))
plt.scatter
stattplt.plot
um plot nur die PunkteKönnen Sie np.stückweise auf das array:
den Anhängen funktioniert, aber erfordert ein wenig zusätzliche Verarbeitung. np ' s stückweise funktioniert. konnte nur tun Sie dies für jede Funktion:
`
`
wenn du mit python 2.x, map() eine Liste zurückgibt.
so schreiben Sie code wie diesen:
wenn Sie mit python 3.x, map() gibt einen iterator.
so konvertieren Sie die Karte, um eine Liste.