Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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 如何使scipy IQR使用阵列两半的中间点的差异?_Python_Numpy_Scipy - Fatal编程技术网

Python 如何使scipy IQR使用阵列两半的中间点的差异?

Python 如何使scipy IQR使用阵列两半的中间点的差异?,python,numpy,scipy,Python,Numpy,Scipy,我试图用scipy的IQR函数计算出一些数字的IQR。然而,当我自己解决这个问题时,我对IQR得到了一个不同的结果,我认为这是因为它不是基于中间值来解决的。我已经看过了,但在那里什么也看不见 例如,我有以下列表: list1 = [7.4, 7.9, 4.1, 8.1, 6.2, 7.1, 7.4, 6.7] 如果我自己计算IQR,从上半部分和下半部分取中间值,我得到1.2。如果我使用iqrlist1,我得到0.95。在这个特定的例子中,我尝试了iqrlist1,插值为“中点”,这给了我正确的

我试图用scipy的IQR函数计算出一些数字的IQR。然而,当我自己解决这个问题时,我对IQR得到了一个不同的结果,我认为这是因为它不是基于中间值来解决的。我已经看过了,但在那里什么也看不见

例如,我有以下列表:

list1 = [7.4, 7.9, 4.1, 8.1, 6.2, 7.1, 7.4, 6.7]
如果我自己计算IQR,从上半部分和下半部分取中间值,我得到1.2。如果我使用iqrlist1,我得到0.95。在这个特定的例子中,我尝试了iqrlist1,插值为“中点”,这给了我正确的答案

然而,我有第二份清单:

列表2=[5,7,2,1,3,4,8,8,6,6]

还有iqrlist2,插值为“中点”,但它给了我3.0作为答案,但我计算出它是4.0。这是我在做的一个在线测试中的一个选择题,我的答案是对还是错并不重要,因为3.0不是一个可用的答案


如果我计算出75%-25%的IQR,得到的结果与IQR相同,这与上中位数和下中位数不同。是否有一个参数我遗漏了,或者我可以在IQR中更改以获得一致的答案

以下返回您想要的IQR类型:

iqr(x, interpolation=('nearest' if len(x) % 4 == 2 else 'midpoint'))
使用100个不同数组大小的测试对数组进行排序,因此通过切片很容易找到中间值的差异:

for k in range(1, 100):
    x = np.sqrt(np.arange(k))   # some not-too-regular, but sorted, numbers
    diff_medians = np.median(x[len(x)//2:]) - np.median(x[:(len(x)+1)//2])
    my_iqr = iqr(x, interpolation=('nearest' if len(x) % 4 == 2 else 'midpoint'))
    assert diff_medians == my_iqr

请注意,当您的示例中没有包含数组的奇数大小时,两半都包括中间元素,例如在[1,2,3]中,两半是[1,2]和[2,3];这似乎是一个自然的选择,否则我们将完全忽略中间的一个。

如果我计算出IQR为75%-25%,我会得到与IQR相同的结果,这与上中位数和下中位数不同。-四分位范围为第75百分位和第25百分位之间的差值。“我不太清楚你从上四分位和下四分位取中间值是什么意思,但无论你在计算什么,它都与IQR不一样。”ali_m写道……四分位之间的范围被定义为第75百分位和第25百分位之间的差值。。。这个定义对于连续分布来说是明确的,但是对于一组离散的值来说,确切的含义并不那么清楚。jceg316想要的是使用排序数据的后半部分和前半部分的中间值的差异作为IQR。@WarrenWeckesser是的,这是正确的,我正在寻找排序数据的前半部分和后半部分的中间值。