NumPy中percentile函数与MATLAB中percentile函数的区别

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函数的区别

  1. 参数顺序不同

NumPy的percentile函数和MATLAB的prctile函数之间的一个主要区别是参数的顺序。在NumPy中,第一个参数是数组,而第二个参数是要计算其值的百分位数,而在MATLAB中,第一个参数是要计算其值的数组,而第二个参数是要计算的百分位数。这个小小的差异可能会导致一个混淆。

  1. 默认的差值解释不同

当使用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')
  1. 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
  1. 保留维度的方式不同

当计算沿轴的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函数相似但不完全相同。由于参数顺序、默认插值、处理超出范围的值以及保留结果尺寸的方式等方面的差异,这两个函数的行为可能会有所不同。因此,当使用这些函数时,需要注意它们的差异,以便正确地预测它们的行为并获得预期的结果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程