日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

java难学还是pythonnanxue_关于python:为什么numpy中的“ NaN”比“ -np.inf”更小?

發布時間:2025/3/15 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java难学还是pythonnanxue_关于python:为什么numpy中的“ NaN”比“ -np.inf”更小? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在涉及np.min或np.argmin的任何比較中,認為NaN小于-np.inf的原因是什么?

import numpy as np

In [73]: m = np.array([np.nan, 1., 0., -np.inf])

In [74]: n = np.array([-np.inf, 1., 0., np.nan])

# Huh??

In [75]: np.min(m)

Out[75]: nan

In [76]: np.min(n)

Out[76]: nan

# Same for np.argmin

In [77]: np.argmin(m)

Out[77]: 0

In [78]: np.argmin(n)

Out[78]: 3

# Its all false!

In [79]: np.nan < -np.inf

Out[79]: False

In [80]: np.nan > -np.inf

Out[80]: False

# OK, that seems to fix it, but its not necessarily elegant

In [81]: np.nanmin(m)

Out[81]: -inf

In [82]: np.nanargmin(m)

Out[82]: 3

我想這可能與將NaN值返回False的任何比較產生副作用,但是當您"偶然"有時在數組中最終以NaN值結尾時,這種恕我直言會帶來一些相當煩人的效果。 np.nanmin或np.nanargmin的使用感覺就像是一種快速修復程序,該修復程序以某種方式裝訂在現有行為之上。

除了文檔中的注釋外:"傳播NaN值,也就是說,如果至少一項是NaN,則相應的最小值也將是NaN。要忽略NaN值(MATLAB行為),請使用nanmin。 沒有找到任何能解釋該行為背后原因的信息。這是通緝還是NaN值的特定內部表示的副作用?為什么?

您可能會發現此答案很有幫助:stackoverflow.com/questions/1565164/

這是一種邏輯行為:如果某物不是數字,則無法將其與是數字的任何東西進行比較,因此,任何比較均返回false。 不僅如此-人們可以說在大多數情況下,NaN不是某些操作的理想結果,因此它應該像其他任何異常一樣傳播。

請參閱最近的答案stackoverflow.com/a/41324751/901925。 在此功能和相關功能中,NaN被顯式編碼為maximal。

您的前提不正確。 np.nan對于任何其他數字(包括它自己)都是無序的,不會引發錯誤。 雖然小于,但它也大于且不等于任何其他數字-包括其自身。 這是IEEE 754的一部分。實現細節是如果用信號處理NaN或安靜地處理NaN。 脾氣暴躁的對待安靜。

正如@Dunno在評論中提到的,將NaN與數字進行比較并沒有太多意義,因此這種行為可能是可以的。 IEEE 754標準說明了將NaN與數字進行比較的方法:

Four mutually exclusive relations are possible: less than, equal, greater than, and unordered. The last case

arises when at least one operand is NaN. Every NaN shall compare unordered with everything, including

itself

根據標準,這是:

# Its all false!

In [79]: np.nan < -np.inf

Out[79]: False

將導致"無序"結果,因此它屬于"小于"關系是不正確的。

該解釋的問題在于,Python中沒有"無序"類別,因此np.nan < 5,np.nan > 5和np.nan == 5不能全部求和為False,但是它們確實是。 如果您開始在常規Python語句中使用np.nan,則將引起各種麻煩。 例如:min([5, np.nan])-> 5,而min([np.nan, 5])-> np.nan。 我想知道為什么np.nan支持比較并且不會像None那樣引發TypeError。

因此,您可能已經知道:

" inf"是無窮大-一個大于任何其他值的值。因此,"-inf"小于任何其他值。請記住,該值是一個數字。

" nan"表示不是數字。

因此,如果根據您在上面聲明的數組" m,n"以及一旦對其中任何一個執行" np.min()",實際上發生的就是在遇到" nan"時其他元素就不會檢查或比較并執行以下語句并返回值:

if (@isnan@(mp)) { /* nan encountered; it's maximal */ return 0; }

因此返回" nan"作為函數的答案!

檢查此代碼,遇到第一個" nan"后立即返回,并在相應函數中返回其位置

In [1]: import numpy as np

In [2]: m = np.array([1., 0., -np.inf, np.nan])

In [3]: n = np.array([np.nan, 1., np.nan, 0.])

In [4]: np.argmin(m)

Out[4]: 3

In [5]: np.argmin(n)

Out[5]: 0

并且" np.nan -np.inf"之類的操作返回" False",因為此處" nan"不能與任何數字" -inf"和" False"進行比較在上述每種情況下,操作都不是比較的答案,而是由于一種異?;蛏鲜龃a的執行,這是由于邏輯錯誤而引起的,因為盡管無窮大,但相對于"無"而言到一個數字!

因此,如果刪除數組中的所有" nan",然后通過" np.nanmin()"計算min,則輸出將如預期的那樣-inf,這不會出現問題!

因此," Nan"不小于或大于" inf"或" -inf",因為實際上它與任何這些數字或任何數字都不可比,與任何數字相比,它將返回" False"!

In [1]: np.nan < 1

Out[1]: False

In [2]: np.nan > 1

Out[2]: False

等等 ...............

希望能幫助到你 !!

從技術上講,numpy c代碼不會引發異常,它只會返回。 if (@isnan@(mp)) { * nan encountered; its maximal * return 0; }。 stackoverflow.com/questions/41320568/

是的,通過引發異常,我的意思是,一旦遇到" nan",我便停止了正常執行,我不知道謝謝@hpaulj

總結

以上是生活随笔為你收集整理的java难学还是pythonnanxue_关于python:为什么numpy中的“ NaN”比“ -np.inf”更小?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。