- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个关于 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.partition
在 np.median
中被调用,它只是默认为基本的 numpy.ndarray.partition
方法(这对于屏蔽数组来说是伪造的!)。
关于python - numpy.median 在屏蔽数组上的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42391150/
我已经在 python 中编写了这个中位数算法的实现,但它似乎没有输出正确的结果,而且它对我来说似乎也不是线性复杂度,知道我在哪里偏离轨道了吗? def select(L): if len(L
我正在使用中位数中位数枢轴方法实现第 k 个选择算法。具体来说,我正在关注 pseudocode listed here. .但是,我的代码崩溃了(下面讨论的错误),我知道它崩溃的原因,但我不明白我能
我想将中位数算法应用于 35 个元素的列表 3 7 4 6 9 12 11 4 5 6 8 2 7 11 23 12 4 7 3 9 8 4 5 6 3 2 1 9 9 3 4 5 6 1 14 T(
作为家庭作业,我被分配编写算法,从无序数字集中找到第 k 个有序数字。作为一种方法,提出了算法中位数的中位数。 不幸的是,我的尝试失败了。如果有人发现错误 - 请纠正我。 private int fi
我已经明白了 我知道中位数算法的中位数(我将表示为 MoM)是一个高常数因子 O(N) 算法。它找到 k 组(通常为 5)的中位数,并将它们用作下一次迭代的集合以查找的中位数。找到它后的基准将在原始集
我的 Java 代码有问题...我已经盯着它看了 10 多个小时,但我就是找不到我犯的错误。 我的任务是实现“中位数的中位数”算法,将数组拆分为最大长度为 5 的数组并查找它们的中位数。然后查找这些中
我想通过以下示例了解“中位数的中位数”算法: 我们有 45 个不同的数字,分为 9 组,每组有 5 个元素。 48 43 38 33 28 23 18 13 8 49 44 39 34 29 24 1
CLRS 第 3 版第 9.3 节“最坏情况线性时间的选择”讨论了“选择”算法(由于 Blum、Floyd、Pratt、Rivest 和 Tarjan,有时称为 BFPRT 算法)用于查找 a 的中值
我正在搜索 John Tukey 算法,该算法使用 R 在我的线性回归上计算“阻力线”或“中值-中值线”。 邮件列表上的一位学生用这些术语解释了这个算法: "The way it's calculat
我的问题正如我在标题中指定的那样:test_median.cpp: In function ‘int main()’: test_median.cpp:26:27: error: cannot con
我正在实施quicksort,我希望将枢轴设置为中位数或三位数。这三个数字是第一个元素,中间元素和最后一个元素。 我能不能找到中位数呢?比较? median(int a[], int p, int r
自从最新的 R 更新以来,我得到了 Note summary.xmlImport: no visible global function definition for ‘median’ 在 CRAN
我使用 Medians of Medians 实现了第 nth_number 选择算法。在 wikipedia ,它指出它的空间复杂度是 O(1) 我必须将中位数存储在一个临时数组中,以便在这些中位数
中位数的中位数 方法在quicksort 类型的分区算法中非常流行,可以产生相当好的主元,从而均匀地分区数组。其逻辑在维基百科中给出为: The chosen pivot is both less t
我正在尝试将使用第一个元素作为基准的快速排序程序修改为使用三个中位数(第一个、最后一个和中间元素的中位数)作为基准的快速排序。然而,到目前为止,我的实现在测试时给出了 ArrayIndexOutOfB
我有一个关于 numpy.median() 在使用 numpy.ma.masked_array() 创建的屏蔽数组上的行为的问题。 正如我从调试自己的代码中了解到的那样,numpy.median()
给定两个具有唯一整数元素的数组,即元素在两个数组内或两个数组之间重复: 这是我编写的递归算法,需要帮助来破译我收到的错误消息。 public class Median { public static
在屏蔽数组的情况下,我对 numpy.median 的输出有点困惑。这是一个简单的示例(假设导入了 numpy - 我的版本是 1.6.2): >>> a = [3.0, 4.0, 5.0, 6.0,
有关问题的详情如下:。我期待中位数来一些价值,但它是未来0每一次,我总是得到一个不正确的模式。
有关问题的详情如下:。我期待中位数来一些价值,但它是未来0每一次,我总是得到一个不正确的模式。
我是一名优秀的程序员,十分优秀!