2015-04-09 12 views
7

Neden alıyorum şu:numpy.isnan (value) değeri == numpy.nan ile aynı değil?

>>> v 
nan 
>>> type(v) 
<type 'numpy.float64'> 
>>> v == np.nan 
False 
>>> np.isnan(v) 
True 
İki eşdeğer olmalıdır sanırdım

?

+2

Ayrıca bkz: http://stackoverflow.com/a/1573715/325565 (doğrudan python ile ilgili değil, neden böyle olduğunu tanımlayan IEEE-754 komitesinin bir üyesi tarafından yazılmış) –

+2

Sanırım tanımsız tanım olarak tanımlandığı için, tanımsız iki değerin özdeş olarak karşılaştırılamayacağı anlamlıdır. Nan alırken sadece biraz kafa karıştırıcı! = Nan hatası ilk kez! –

+1

ile ilgili: http://stackoverflow.com/q/13003202/674039 – wim

cevap

8

nan != nan. Bu, nan'daki eşitlik karşılaştırmalarının nasıl tanımlandığıdır. Bu sonucun, sayısal algoritmalar için alternatiften daha uygun olduğuna karar verildi. Bu, özellikle neden isnan var.

+0

Teşekkürler! Bu hata ayıklanırken bir süreliğine beni çok şaşırttı :) –

+0

Bu arada, büyük olasılıkla IEEE 754'ten kaynaklanıyor: * Karşılıklı dört ilişki mümkün: az, eşit, büyük ve sırasız. Son durum, en az bir işlenenin NaN olduğunda ortaya çıkar. Her bir NaN, kendisi de dahil olmak üzere her şeyle sırasız bir şekilde karşılaştıracaktır. * Düzenleme: Daha fazla ayrıntıya giden bir bağlantıya bir yorum ile ~ 2 saat tarafından dövüldüğüm anlaşılıyor - Joe Kington'un bu soruyu yorumlayın. – jedwards

İlgili konular