NumPy中percentile函数与MATLAB中percentile函数的区别
在本文中,我们将介绍NumPy中的percentile函数与MATLAB中的percentile函数之间存在的差异。
阅读更多:Numpy 教程
什么是percentile函数?
percentile函数是用于计算给定数组中某个百分位数的函数。例如,当p=50时,percentile函数将返回数据集中的中位数。
在NumPy中,percentile函数的用法如下:
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False)
在MATLAB中,percentile函数被称为prctile函数,其用法如下:
prctile(X, p)
NumPy中的percentile函数与MATLAB的prctile函数的区别
- 参数顺序不同
NumPy的percentile函数和MATLAB的prctile函数之间的一个主要区别是参数的顺序。在NumPy中,第一个参数是数组,而第二个参数是要计算其值的百分位数,而在MATLAB中,第一个参数是要计算其值的数组,而第二个参数是要计算的百分位数。这个小小的差异可能会导致一个混淆。
- 默认的差值解释不同
当使用interpolation参数计算percentile时,NumPy和MATLAB之间的默认值解释不同。NumPy的解释是“在percentile处使用以前后两个值平均值的线性插值”,而MATLAB使用的是“在percentile处使用较小值”。
这可以通过指定interpolation参数来纠正。例如,在NumPy中,要使用MATLAB的解释,请将插值参数设置为“lower”:
import numpy as np
x = np.array([1, 2, 3, 4, 5])
p = 50
np.percentile(x, p, interpolation='lower')
- NumPy中超出范围的处理方式不同
当输入数组中有超出0和100之间的值时,NumPy和MATLAB之间的处理方式有所不同。在NumPy中,任何位于0和100之外的值都将被截断为最小或最大值,而在MATLAB中,它们将被视为无效值,并返回NaN。
import numpy as np
x = np.array([1, 2, 3, 4, 5, 200])
p = 50
np.percentile(x, p)
# Output: 3.0
import matlab
x = matlab.double([1, 2, 3, 4, 5, 200])
p = 50
matlab.prctile(x, p)
# Output: NaN
- 保留维度的方式不同
当计算沿轴的percentile值时,NumPy和MATLAB之间有不同的方式来处理结果。在NumPy中,默认情况下,结果将收缩以删除轴上的尺寸,而在MATLAB中,默认情况下,结果将保留在维度中。
这可以通过指定keepdims参数来纠正。例如,在NumPy中,要保留结果的尺寸,请将keepdims参数设置为True:
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]])
p = 50
axis = 0
np.percentile(x, p, axis=axis, keepdims=True)
总结
总之,NumPy中的percentile函数和MATLAB中的prctile函数相似但不完全相同。由于参数顺序、默认插值、处理超出范围的值以及保留结果尺寸的方式等方面的差异,这两个函数的行为可能会有所不同。因此,当使用这些函数时,需要注意它们的差异,以便正确地预测它们的行为并获得预期的结果。