Ich versuche eine Funktion zu zeichnen, die bedingt definiert ist. Im Einzelnen: U (x) = (2 ** delta)/((Dd) ** delta) * (D/2 - (x-x0)) ** delta, für abs (x-x0) kleiner als D/2 und 0 sonst.Bedingtes Plotten mit Numpy und Pyplot
Aber mein Problem ist, dass ich x, x0 als numpy Arrays haben möchte, weil dies ist, wie ich sie im Rest meines tatsächlichen Codes verwende.
ich Set-up das folgende Beispiel:
import numpy as np
import matplotlib.pyplot as plt
AD = 0.2
D = 0.4
delta = 8
def Parabolic(x, delta, D, AD):
x0 = np.round(x)
tempx = np.abs(x-x0)
tempD = D/2*np.ones(len(x))
if tempx<tempD:
return ((2**delta)/(D-AD)**delta)*(D/2 - (x-x0))**delta
else:
return 0
figure = plt.figure(figsize=(10,8), dpi=72)
xmin = -1.0
xmax = 1.0
X = np.linspace(xmin,xmax,1000)
plt.plot(X, Parabolic(X, delta=8, D=0.4, AD=0.2))
Offensichtlich dieses Beispiel funktioniert nicht, da die Linie tempx<tempD
die Fehler auslöst, dass ein Wahrheitswert einer Liste nicht eindeutig ist.
Ich suchte in der Dokumentation von numpy und fand die Funktion np.less (tempx, tempD). Aber wenn ich tempx < tempD
durch np.less(tempx, tempD)
ersetze, funktioniert es immer noch nicht, da ich wieder nach einem Wahrheitswert einer ganzen Liste frage. Ich verstehe, dass das Problem nicht mit numpy ist, aber mit meiner Unfähigkeit zu verstehen, wie man die logischen Funktionen verwendet, die numpy zur Verfügung stellt.
Es tut mir leid, wenn diese einen Weg in einem anderen Beitrag geantwortet haben, habe ich in diesem Forum gesucht, konnte aber nichts anderes als die curve()
Methode finden. Ich möchte jedoch mein numpy.array-Format für die Verwendung in meinen tatsächlichen Codes beibehalten. Ich würde wetten, dass die Antwort sehr einfach sein muss, ich kann einfach nicht daran denken.
Auf dem Fehler finden Sie unter http: // stackoverflow.com/a/30081652/901925 und seine Sidebar. – hpaulj