È corretto aggiungere booleani per contare il numero di valori veri in un vettore?

2

È concettualmente corretto sommare un vettore di booleani? Da un punto di vista matematico, direi che non lo è: True + True != 2 . Ma è abbastanza pratico farlo ancora! Esempio utilizzando la libreria Python vettorizzata numpy :

In [1]: X = rand(10)

In [2]: large = X>0.6

In [3]: large.dtype
Out[3]: dtype('bool')

In [4]: large.sum()
Out[4]: 7

Non mi piace, ma è molto pratico. È una buona pratica?

Aggiornamento : l'obiettivo è contare il numero di valori veri in un vettore. \

Aggiornamento 2013-02-18 : ho appena scoperto la funzione numpy count_nonzero fa esattamente ciò di cui ho bisogno in modo corretto. Ciò significa che, per quanto riguarda Python , non è necessario utilizzare il modo "sporco".

    
posta gerrit 20.10.2012 - 00:36
fonte

1 risposta

6

Direi che non è semanticamente corretto aggiungere True e True per ottenerne due. Potrebbe funzionare, ma sembra fare affidamento su un dettaglio di implementazione.

Python definisce alcune cose come False , come ad esempio:

""
0
0.00
None, 
[], 
(),
.__bool__() evaluates to False, 
etc... 

e tutto il resto è True .

L'operatore + in python, se usato su bool lo convertirà prima in int .

>>> int(True)
1
>>> int(False)
0
>>> True + True
2

Se decidi di farlo in Python, assicurati di commentare il tuo codice di conseguenza.

    
risposta data 20.10.2012 - 00:45
fonte

Leggi altre domande sui tag