爲什麼,在Python/numpy的:蟒蛇NumPy的奇怪的布爾運算的行爲
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]
我認爲這是奇怪的是-bools
返回logical_not(bools)
,因爲在所有其他情況下的行爲是「算術」,而不是「邏輯」 。
一個誰想要使用布爾數組作爲一個0/1面具(或「特色功能」)被強制使用某種方式漸開線表達式,如(0-bools)
或(-1)*bools
,並且可以很容易招致成的bug,如果他忘了這個。
爲什麼會這樣,而且這將是獲得所期望的行爲最好的可以接受的方式? (旁當然評論)
我不明白爲什麼有人會使用一組布爾值作爲掩碼,而不是(0,1),這更直觀,但我確實看到了一個觀點。什麼是期望的行爲雖然做-2 *假? –
+在Python中一切都是合乎邏輯的。如「blabla」爲True(因此有點布爾)和一個字符串在同一時間。 –
@ Ev.Kounis,當我想通過下面的代碼寫出一個延遲的指數衰減時,我偶然發現了它:delExpDecay = lambda t,d,a,tau:a * exp( - (t
lurix66