Warum ist es, in Python/numpy:Python numpy seltsames boolean arithmetisches Verhaltens
from numpy import asarray
bools=asarray([False,True])
print(bools)
[False True]
print(1*bools, 0+bools, 0-bools) # False, True are valued as 0, 1
[0 1] [0 1] [ 0 -1]
print(-2*bools, -bools*2) # !? expected same result! :-/
[0 -2] [2 0]
print(-bools) # this is the reason!
[True False]
Ich halte es seltsam, dass -bools
kehrt logical_not(bools)
, weil in allen anderen Fällen das Verhalten "Arithmetik", nicht "logisch" .
Einer, der eine Reihe von booleans als 0/1 Maske (oder „charakteristische Funktion“) verwenden möchte irgendwie Evolvente Ausdrücke zu verwenden, gezwungen wird, wie (0-bools)
oder (-1)*bools
und in Fehler leicht entstehen kann, wenn er darüber vergisst .
Warum ist es so, und was wäre der beste akzeptable Weg, um das gewünschte Verhalten zu erreichen? (neben dem Kommentar natürlich)
Ich sehe nicht, warum jemand eine Reihe von Booleans für eine Maske und nicht (0,1) verwenden würde, die viel intuitiver ist, aber ich sehe einen Punkt. Was ist das gewünschte Verhalten, wenn man -2 * Falsch ?? –
+ In Python ist auch alles logisch. wie in "blabla" ist True (also irgendwie boolean) und eine Zeichenfolge zur gleichen Zeit. –
@ Ev.Kounis, ich stolperte hinein, als ich mit dem folgenden Code einen verzögerten exponentiellen Zerfall schreiben wollte: delExpDecay = Lambda t, d, a, tau: a * exp (- (t
lurix66