Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 functools:计算四分位范围_Python_Numpy_Scipy_Percentile_Functools - Fatal编程技术网

Python functools:计算四分位范围

Python functools:计算四分位范围,python,numpy,scipy,percentile,functools,Python,Numpy,Scipy,Percentile,Functools,我使用functools以这种方式计算百分位数: import functools percentiles = tuple(functools.partial(np.percentile, q=q) for q in (75, 85, 95)) percentiles (functools.partial(<function percentile at 0x7f91fe1e9730>, q=75), functools.partial(<function percentil

我使用
functools
以这种方式计算百分位数:

import functools
percentiles = tuple(functools.partial(np.percentile, q=q) for q in (75, 85, 95))

percentiles
(functools.partial(<function percentile at 0x7f91fe1e9730>, q=75),
 functools.partial(<function percentile at 0x7f91fe1e9730>, q=85),
 functools.partial(<function percentile at 0x7f91fe1e9730>, q=95))
然后我想在百分位函数中加上四分位,但加上[75-25]计算平均值

percentiles = tuple(functools.partial(np.percentile, q=q) for q in (75, 85, 95, 75-25))

percentiles
(functools.partial(<function percentile at 0x7f91fe1e9730>, q=75),
 functools.partial(<function percentile at 0x7f91fe1e9730>, q=85),
 functools.partial(<function percentile at 0x7f91fe1e9730>, q=95),
 functools.partial(<function percentile at 0x7f91fe1e9730>, q=50))
percentiles=tuple(functools.partial(np.percentile,q=q)表示(75,85,95,75-25)中的q)
百分位数
(functools.partial(,q=75),
functools.partial(,q=85),
functools.partial(,q=95),
functools.partial(,q=50))
我的目的是得到四分位间距的值,而不是平均值。如何修复此问题?

不久前,我在
scipy.stats
中添加了一个函数

您可以按如下方式修改理解:

percentiles = tuple(ss.iqr if q is None else functools.partial(np.percentile, q=q) for q in (75, 85, 95, None))

您无法通过调用
百分位数来获得IQR:它是两个百分位数之间的差异。最接近的方法是在一次调用中计算第25和第75个百分位数:

functools.partial(np.percentile, q=(25, 75))
q
是一个元组时,您可以修改您的理解来构造一个封装在
np.diff
中的函数:

percentiles = tuple(lambda x: np.diff(np.percentile(x, q=q)) if isinstance(q, tuple) else functools.partial(np.percentile, q=q) for q in (75, 85, 95, (25, 75)))

谢谢,我现在就试试。我不知道你为什么要这样做,但我发布了几个选项。我看你已经选择了一个。手机延迟。
percentiles = tuple(lambda x: np.diff(np.percentile(x, q=q)) if isinstance(q, tuple) else functools.partial(np.percentile, q=q) for q in (75, 85, 95, (25, 75)))