numpy 分位数()中的线性插值
Linear interpolation in numpy quantile()
考虑以下代码:
>>> import numpy as np
>>> l = [21,22,24,24,26,97]
>>> np.quantile(l, 0.25)
22.5
linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j.
谁能解释一下这个例子中的 i
、j
和 fraction
以及我们如何得到 22.5
?
大致是这样的:
import numpy as np
def my_quantile(array, q):
n = len(array)
index = (n - 1) * q
if int(index) == index: # has no fractional part
return array[index]
fraction = index - int(index)
left = int(index)
right = left + 1
i, j = array[left], array[right]
return i + (j - i) * fraction
if __name__ == '__main__':
arr = [21, 22, 24, 24, 26, 97]
assert my_quantile(arr, 0.33) == np.quantile(arr, 0.33)
assert my_quantile(arr, 0.25) == np.quantile(arr, 0.25)
assert my_quantile(arr, 0.75) == np.quantile(arr, 0.75)
考虑以下代码:
>>> import numpy as np
>>> l = [21,22,24,24,26,97]
>>> np.quantile(l, 0.25)
22.5
linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j.
谁能解释一下这个例子中的 i
、j
和 fraction
以及我们如何得到 22.5
?
大致是这样的:
import numpy as np
def my_quantile(array, q):
n = len(array)
index = (n - 1) * q
if int(index) == index: # has no fractional part
return array[index]
fraction = index - int(index)
left = int(index)
right = left + 1
i, j = array[left], array[right]
return i + (j - i) * fraction
if __name__ == '__main__':
arr = [21, 22, 24, 24, 26, 97]
assert my_quantile(arr, 0.33) == np.quantile(arr, 0.33)
assert my_quantile(arr, 0.25) == np.quantile(arr, 0.25)
assert my_quantile(arr, 0.75) == np.quantile(arr, 0.75)