Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy如何在数组/列表中找到中值?_Python_Algorithm_Numpy_Median - Fatal编程技术网

Python numpy如何在数组/列表中找到中值?

Python numpy如何在数组/列表中找到中值?,python,algorithm,numpy,median,Python,Algorithm,Numpy,Median,我读到,numpy使用introselect在数组/列表中查找中值()[第2页;最后5行]。但我在numpy源代码中找不到任何提示: 有人知道我在哪里可以找到introselect的numpy实现吗?或者如果numpy不使用introselect,那么使用什么样的算法来查找中值 非常感谢:)第3528行似乎是主要的中值函数。如果我们去掉所有的多维和nan的东西 def _median(a, axis=None, out=None, overwrite_input=False): # ca

我读到,numpy使用introselect在数组/列表中查找中值()[第2页;最后5行]。但我在numpy源代码中找不到任何提示:

有人知道我在哪里可以找到introselect的numpy实现吗?或者如果numpy不使用introselect,那么使用什么样的算法来查找中值


非常感谢:)

第3528行似乎是主要的中值函数。如果我们去掉所有的多维和nan的东西

def _median(a, axis=None, out=None, overwrite_input=False):
    # can't be reasonably be implemented in terms of percentile as we have to
    # call mean to not break astropy

    # Set the partition indexes
    sz = a.shape
    if sz % 2 == 0:
        szh = sz // 2
        kth = [szh - 1, szh]
    else:
        kth = [(sz - 1) // 2]

    part = partition(a, kth, axis=None)

    return mean(part[indexer], axis=None, out=out)
所以分区是做所有的工作,并且来自

from numpy.core.fromnumeric import (
    ravel, nonzero, partition, mean, any, sum
    )
如果我们转到numpy代码,我们将得到以下内容

实现和使用了哪些

因此,这是一种选择


一旦达到递归深度的两倍,算法将更改为使用meadian-of-median5,直到分区小于5。

嘿,谢谢你的回答。我不确定这是否具体,但你知道他们用什么样的标准来决定是否应该转换到中间值的中间值吗?他们在C代码的第341行中说:depth_limit=npy_get_msb(num)*2;稍后:ll=low+1和hh=high(第345行),但ll和hh的起始值是什么?深度极限值是多少?如何计算。(我很抱歉问了这么一个“愚蠢”的问题,但我对C不太熟悉)@maxpower它在数组中的高低,缩小了仍然需要分区的部分。深度限制是如何计算的?或者更具体地说,npy_get_msb(num)是什么意思,num的值是什么?非常感谢你,你帮了我很多:)msb-最重要的位,你可以将数字减半多少次。
NPY_SELECTKIND sortkind = NPY_INTROSELECT;
val = PyArray_Partition(self, ktharray, axis, sortkind);
mid = ll + median_of_median5_@suff@(v + ll, hh - ll, NULL, NULL);