Dovrebbe essere una domanda semplice, ma non riesco a trovare una risposta da nessuna parte. L'operatore ~
in python è documentato come operatore di inversione bit a bit. Belle. Ho notato comportamento apparentemente schizofrenico però, cioè:python tilde unario operatore come negazione 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])
Nei primi 4 esempi, posso vedere che pitone sta attuando (come documentato) ~x = -(x+1)
, con l'ingresso trattato come un int anche se è boolean . Quindi, per un booleano scalare, ~
non viene considerato come una negazione logica. Non che il comportamento sia identico su una matrice numpy definita con valori booleani con un tipo int.
Perché il ~
funziona come operatore di negazione logica su un array booleano (Nota: ~numpy.isfinite(numpy.inf) -> True
?)?
È estremamente fastidioso che io debba utilizzare not()
su uno scalare, ma not()
non funzionerà per negare un array. Poi per un array, devo usare ~
, ma ~
non funzionerà negare uno scalare ...
Grazie ecatmur per la spiegazione, e soprattutto per menzionare '&' e '|'. Non ne sapevo nulla e usavo invece logico_e logico_or. –
Sto usando 'numpy' per anni e fino ad ora non conoscevo lo scopo di quei costrutti apparentemente ridefiniti ma sottolineati come' np.False_'. Tutto ciò ha senso ora – dashesy