gpt4 book ai didi

python - numpy.median 在屏蔽数组上的意外行为

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:44 24 4
gpt4 key购买 nike

我有一个关于 numpy.median() 在使用 numpy.ma.masked_array() 创建的屏蔽数组上的行为的问题。

正如我从调试自己的代码中了解到的那样,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

最佳答案

Does anyone know if this might be considered a bug?

嗯,这是一个错误!我几个月前在他们的问题跟踪器 (Link to the bug report) 上发布了它。

此行为的原因是 np.median 使用输入数组的 partition 方法,但 np.ma.MaskedArray不会覆盖 partition 方法。所以当arr.partitionnp.median 中被调用,它只是默认为基本的 numpy.ndarray.partition 方法(这对于屏蔽数组来说是伪造的!)。

关于python - numpy.median 在屏蔽数组上的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42391150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com