Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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.percentile是什么意思?如何使用它分割数组?_Python_Numpy - Fatal编程技术网

Python numpy.percentile是什么意思?如何使用它分割数组?

Python numpy.percentile是什么意思?如何使用它分割数组?,python,numpy,Python,Numpy,我试图理解numpy的百分位数 import numpy as np nd_array = np.array([3.6216, 4.5459, -3.5637, -2.5419]) step_intervals = range(100, 0, -5) for percentile_interval in step_intervals: threshold_attr_value = np.percentile(np.array(nd_array), percentile_interval

我试图理解numpy的百分位数

import numpy as np
nd_array = np.array([3.6216, 4.5459, -3.5637, -2.5419])
step_intervals = range(100, 0, -5)

for percentile_interval in step_intervals:
    threshold_attr_value = np.percentile(np.array(nd_array), percentile_interval)
    print "percentile interval ={interval}, threshold_attr_value = {threshold_attr_value}, {arr}".format(interval=percentile_interval, threshold_attr_value=threshold_attr_value, arr=sorted(nd_array))
我得到了这些的一个值

percentile interval =100, threshold_attr_value = 4.5459, [-3.5636999999999999, -2.5419, 3.6215999999999999, 4.5458999999999996]

百分位值是什么意思

  • 数组中100%的值小于4.5459
  • 数组中5%的值小于-3.41043
这是正确的阅读方法吗


我想把numpy数组分割成几个小的子数组。我想根据元素的百分位发生率来做。如何执行此操作?

不,正如您通过检查所看到的,数组中只有75%的值严格小于4.5459,25%的值严格小于-3.41043。如果你写的小于或等于,那么你会给出“百分位数”的一个通用定义,但碰巧也不是你的案例中所适用的定义;相反,
numpy
正在应用某种插值方案,以确保将[0,100]中的给定数字映射到相应的百分位数是连续的、分段线性的,同时在与给定数组中的值相对应的列组中仍然给出“右”值。事实证明,即使是这样,你也可以用许多不同的方法来做,所有这些方法都是合理的,如中所述。正如您在中所看到的,您可以控制插值行为,默认情况下,它使用维基百科文章所称的“第二个变量,$C=1$”

理解这一含义的最简单方法可能是简单地绘制计算固定长度4数组的
np.percentile
不同值的结果:


请注意扭结是如何均匀分布在[01100]上的,并且与数组中的实际值相对应的百分位数是通过分别在0*100/(4-1)、1*100/(4-1)、2*100/(4-1)和3*100/(4-1)处计算
lambda p:np.百分位数(nd_数组,p)
(arr,q)表示
arr
元素的几乎
q%
低于
a
。为什么我要强调几乎

  • 如果
    q=100
    ,它总是返回
    arr
    的最大值。因此,不能说
    q%
    的元素“低于”
    a
  • 如果
    q=0
    ,它总是返回
    arr
    的最小值。因此,不能说元素的
    q%
    小于或等于
    a
  • 此外,返回值取决于插值的类型
以下代码显示了插值参数的作用:

>>> import numpy as np
>>> arr = np.array([1,2,3,4,5])
>>> np.percentile(arr, 90) # default interpolation='linear'
4.5999999999999996
>>> np.percentile(arr, 90, interpolation='lower')
4
>>> np.percentile(arr, 90, interpolation='higher')
5

你所说的最小子数组是什么意思?你想如何基于百分位数分割元素?你的假设基本上是正确的(尽管我将“低于”替换为“低于或等于”)。5%值不在实际数组中的原因是使用了一些插值。可以使用参数设置插值类型,请参阅文档。
>>> import numpy as np
>>> arr = np.array([1,2,3,4,5])
>>> np.percentile(arr, 90) # default interpolation='linear'
4.5999999999999996
>>> np.percentile(arr, 90, interpolation='lower')
4
>>> np.percentile(arr, 90, interpolation='higher')
5