我有一個問題,有關numpy.median()在numpy.ma.masked_array()創建的屏蔽陣列上的行爲。numpy.median在屏蔽陣列上的意外行爲
在我從調試自己的代碼的理解,numpy.median()無法如預期那樣對蒙面陣列(見Using numpy.median on a masked array對這個問題的定義)
答案提供的工作是:
說明:如果我沒有記錯,np.median不支持子類,所以無法在np.ma.MaskedArray上正常工作。
因此,結論是,爲了計算掩蔽陣列中元素的中值,使用numpy.ma.median()
,因爲這是專用於掩蔽陣列的中值函數。
我的問題在於我剛剛花費了相當多的時間來發現這個問題,因爲沒有辦法知道這個問題。
嘗試通過numpy.median()計算屏蔽數組的中值時沒有發出警告或異常。
這個函數返回的答案不是預期的,當人們不知道這個時會導致嚴重的問題。
有誰知道這可能被認爲是一個錯誤?
在我看來,預期的行爲應該是在屏蔽數組上使用numpy.median會引發某種異常。
任何想法???
的下面的測試腳本示出了使用numpy.median掩蔽陣列上的不需要的和意外的行爲(請注意,有效元素的正確和預期中值是2.5 !!!):
In [1]: import numpy as np
In [2]: test = np.array([1, 2, 3, 4, 100, 100, 100, 100])
In [3]: valid_elements = np.array([1, 1, 1, 1, 0, 0, 0, 0], dtype=np.bool)
In [4]: testm = np.ma.masked_array(test, ~valid_elements)
In [5]: testm
Out[5]:
masked_array(data = [1 2 3 4 -- -- -- --],
mask = [False False False False True True True True],
fill_value = 999999)
In [6]: np.median(test)
Out[6]: 52.0
In [7]: np.median(test[valid_elements])
Out[7]: 2.5
In [8]: np.median(testm)
Out[8]: 4.0
In [9]: np.ma.median(testm)
Out[9]: 2.5
因此,您的抱怨是'np.median'不起作用,但'np.ma.median'呢? – Eric
...我的抱怨是,它沒有給出任何跡象(即使在文檔中)np.median在將其應用於蒙版數組時給出錯誤結果。對我個人來說,有時候會很sl,,這個錯誤的np.median值將不被發現。所以,抱怨並不是說np.ma.median能夠工作,但是np.median並沒有在掩模陣列上給出錯誤結果的任何跡象。 –
大量的'np。*'函數在掩碼陣列上無法正常工作。問題是,'np。*'函數甚至不知道掩碼數組存在。 – Eric