2010-10-29 16 views
3

Python 3,1en utilisant float ('nan') pour représenter les valeurs manquantes - sûr?

Je fais des calculs sur des données qui a des valeurs manquantes. Tout calcul impliquant une valeur manquante doit entraîner une valeur manquante.

Je pense utiliser float('nan') pour représenter les valeurs manquantes. Est-ce sûr? À la fin je vais juste vérifier

def is_missing(x): 
    return x!=x # I hope it's safe to use to check for NaN 

Cela semble parfait, mais je n'ai pas trouvé de confirmation claire dans la documentation.

Je ne pourrais pas utiliser Bien sûr, mais il faudrait alors que je fais tous les calculs avec try/except TypeError pour le détecter. Je pourrais également utiliser Inf, mais je suis encore moins sûr de la façon dont cela fonctionne.

EDIT:

@MSN Je comprends l'aide NaN est lent. Mais si mon choix est soit:

# missing value represented by NaN 
def f(a, b, c): 
    return a + b * c 

ou

# missing value represented by None 
def f(a, b, c): 
    if a is None or b is None or c is None: 
    return None 
    else: 
    return a + b * c 

j'imagine l'option NaN est encore plus rapide, est-ce pas?

+4

'math.isnan (x)' est plus lisible que 'x! = x'. – adw

Répondre

1

Il est sûr à la rigueur, mais si le FPU a jamais toucher x il peut être incroyablement lent (comme certains le matériel traite NaN comme un cas particulier): Is it a good idea to use IEEE754 floating point NaN for values which are not set?

+0

Je suppose que ce ne sera pas plus rapide si je vérifie à la place chaque expression pour les valeurs manquantes en utilisant 'if'? – max

+0

@max, Pouvez-vous me donner un exemple de code de ce que vous voulez dire? Je ne comprends pas très bien la question. – MSN

+0

Edited ma question pour montrer l'exemple de code. – max