我有一个关于 numpy.median() 在使用 numpy.ma.masked_array() 创建的掩码数组上的行为的问题。
正如我从调试自己的代码中了解到的那样,numpy.median() 在掩码数组上无法按预期工作(有关问题的定义,请参阅在掩码数组上使用 numpy.median)
提供的答案是:
说明:如果我没记错的话,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