Powinien być prostym pytaniem, ale nie jestem w stanie znaleźć nigdzie odpowiedzi. Operator ~
w Pythonie jest udokumentowanym operatorem odwracania bitowego. W porządku. Zauważyłem pozornie schizofreniczne zachowania choć słownie:python tyldowy operator unarny jako negacja numpy bool array
~True -> -2
~1 -> -2
~False -> -1
~0 -> -1
~numpy.array([True,False],dtype=int) -> array([-2,-1])
~numpy.array([True,False],dtype=bool) -> array([False,True])
W pierwszych 4 przykładach, widzę, że Python jest wdrożenie (udokumentowane) ~x = -(x+1)
, z wejściem traktowanej jako int nawet jeśli jest to logiczna . W związku z tym, dla skalarnej wartości boolowskiej, ~
nie jest traktowane jako logiczna negacja. Nie oznacza to, że zachowanie jest identyczne w tablicy typu numpy zdefiniowanej wartościami logicznymi za pomocą typu int.
Dlaczego następnie ~
działa jako logiczny operator negacji w tablicy boolowskiej (Zwróć też uwagę: ~numpy.isfinite(numpy.inf) -> True
?)?
To jest bardzo denerwujące, że muszę używać not()
na skalar, ale not()
nie będzie działać, aby zanegować tablicę. Następnie na tablicy, muszę używać ~
, ale ~
nie będzie działać do zanegowania skalar ...
Dzięki ecatmur za wyjaśnienie, a zwłaszcza za wspomnienie '&' i '|'. Nie wiedziałem o tym i użyłem zamiast tego logicznego_i logicznego_orazu. –
Używam 'numpy' od wieków i do tej pory nie znałem celu tych pozornie przedefiniowanych-ale-podkreślonych konstrukcji, takich jak' np.False_'. To wszystko ma teraz sens – dashesy