我有一个问题,有关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