2016-05-22 6 views
0

Ich bin sehr neu zu Python und muss eine stückweise Funktion definieren, aber sobald ich mehr als zwei Bedingungen angeben, werde ich mit "ValueError: function list und condition list muss sei der gleiche ".np.piecewise funktioniert nicht mit drei Bedingungen

Zum Beispiel ist die sehr einfache Testfunktion

def test(r): 
    r1=1.8 
    return np.piecewise(r, [(r<r1), (r==r1), (r>r1)], [0, 1, 2]) 

erzeugt diesen Fehler, während eine Funktion mit nur zwei Bedingungen

def test(r): 
    r1=1.8 
    return np.piecewise(r, [(r<r1), (r>r1)], [0, 2]) 

einwandfrei funktioniert. Ich habe mein Problem umgangen, indem ich np.select verwendet habe, aber ich bin neugierig, was mein Fehler ist und wie er gelöst werden kann. Ich bin mir nicht sicher, ob dies von Interesse ist, aber die Variable "r", die in der Funktion verwendet wird, wird ein Skalarwert sein, keine Liste oder ein Array oder etwas Kompliziertes.

Hat jemand eine Idee, wie ich mein Problem lösen kann?

+0

Ihr erstes Beispiel funktioniert gut für mich. Bitte geben Sie weitere Details über den Fehler, und beheben Sie Einzug –

+0

Welche Version ist Ihre 'numpy'? Ich sehe nichts im 'stückweisen' Code, der diesen Fehler erzeugen würde. Möglicherweise müssen Sie die vollständige Fehlermeldung anzeigen. – hpaulj

Antwort

3

Sie eine Liste an die Funktion sind vorbei, aber Sie sollten eine numpy Array übergeben:

r1 = 1.8 
r = numpy.arange(0, 3, 0.2) 
print numpy.piecewise(r, [(r<r1), (r==r1), (r>r1)], [0, 1, 2]) 
# prints: 
# array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 2., 2., 2., 2., 2.]) 

aber

r = list(r) 
print numpy.piecewise(r, [(r<r1), (r==r1), (r>r1)], [0, 1, 2]) 

gibt den Fehler, den Sie erwähnen hinzufügen.

+0

Die 'list (r)' erzeugt den Fehler in '(r hpaulj

+0

aus der [docs] (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.piecewise.html), erfordert "stückweise" "r" im Gegensatz zu "ndarray" sagen wir 'numpy.dot (a, b)', was erfordert, dass 'a' und' b' 'array_like' sind. Obwohl es richtig ist, dass '(r

+0

In welcher Version von numpy? – hpaulj

Verwandte Themen