簡體   English   中英

當數組中存在非nan值時,Python Numpy nanmax()返回nan

[英]Python Numpy nanmax() returning nan when there are non nan values in the array

我嘗試使用Numpy的nanmax函數來獲取矩陣列中所有非nan值的最大值,對於某些方法而言,某些方法可以將nan作為最大值返回。 但是,每列中都有非Nan值,並且為了確保我在R中使用max(x,na.rm = T)嘗試了相同的操作,並且一切正常。

任何人都知道為什么會發生這種情況嗎? 我唯一能想到的是我從熊貓框架轉換了numpy矩陣,但我真的沒有頭緒...

np.nanmax(datamatrix, axis=0)

matrix([[1, 101, 193, 1, 163.0, 10.6, nan, 4.7, 142.0, 0.47, 595.0,
         170.0, 5.73, 24.0, 27.0, 23.0, 361.0, 33.0, 94.0, 9.2, 16.8, nan,
         nan, 91.0, nan, nan, nan, nan, 0.0, 105.0, nan, nan, nan, nan,nan,
         nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
         nan, nan, nan, nan, nan, nan, nan, nan]], dtype=object)

您的數組是一個object數組,這意味着數組中的元素是任意的python對象。 Pandas使用對象數組,因此當您將Pandas DataFrame轉換為numpy數組時,結果很可能是對象數組。 nanmax()無法正確處理對象數組。

這是幾個示例,一個使用numpy.matrix ,另一個使用numpy.ndarray 使用matrix ,您完全不會收到任何警告:出現了問題:

In [1]: import numpy as np

In [2]: m = np.matrix([[2.0, np.nan, np.nan]], dtype=object)

In [3]: np.nanmax(m)
Out[3]: nan

使用數組時,您會得到一個神秘的警告,但是nan仍然返回:

In [4]: a = np.array([[2.0, np.nan, np.nan]], dtype=object)

In [5]: np.nanmax(a)
/Users/warren/miniconda3scipy/lib/python3.5/site-packages/numpy/lib/nanfunctions.py:326: RuntimeWarning: All-NaN slice encountered
  warnings.warn("All-NaN slice encountered", RuntimeWarning)
Out[5]: nan

您可以通過幾種方法確定數組是否為對象數組。 在交互式python或ipython shell中顯示數組時,將看到dtype=object 或者您可以檢查a.dtype ; 如果a是對象數組,則將看到dtype('O')object (取決於最終看到的是str()還是repr() )。

假設數組中的所有值實際上都是浮點值,一種解決方法是首先從對象數組轉換為浮點值數組:

In [6]: b = a.astype(np.float64)

In [7]: b
Out[7]: array([[  2.,  nan,  nan]])

In [8]: np.nanmax(b)
Out[8]: 2.0

In [9]: n = m.astype(np.float64)

In [10]: np.nanmax(n)
Out[10]: 2.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM