Python中的i阶统计量

Python中的i阶统计量,python,Python,给定一个n可比较元素(比如数字或字符串)的列表,找到ith有序元素的最佳算法需要O(n)时间 Python是否以本机方式实现列表、dict、集合等的时间顺序统计?Python提到的数据结构中没有一个以本机方式实现第i顺序统计算法 事实上,这对于字典和集合可能没有多大意义,因为它们都没有对元素的顺序进行假设。对于列表,应该不难实现,它提供了O(n)运行时间。如果i这不是本机解决方案,但您可以使用NumPy查找O(n)时间内列表的k阶统计信息 编辑:这假设索引为零,即上面的“零阶统计”为0,希望do

给定一个
n
可比较元素(比如数字或字符串)的列表,找到
i
th有序元素的最佳算法需要
O(n)
时间


Python是否以本机方式实现列表、dict、集合等的时间顺序统计?

Python提到的数据结构中没有一个以本机方式实现第i顺序统计算法


事实上,这对于字典和集合可能没有多大意义,因为它们都没有对元素的顺序进行假设。对于列表,应该不难实现,它提供了O(n)运行时间。

如果i这不是本机解决方案,但您可以使用NumPy查找O(n)时间内列表的k阶统计信息


编辑:这假设索引为零,即上面的“零阶统计”为
0

,希望downvoter和closevoter发表评论。这是不准确的。分区之后,您需要找到最大值。所以这个
np.partition(np.asarray(x),k)[:k].max()
@piRSquared,谢谢。我认为您将其解释为1索引,所以我现在已经澄清了这一点。我的观点是
np.partition
不是排序。这就是问题所在,也是为什么它更好的原因。这就是说,因为它没有被排序,所以不能保证第k个顺序统计信息处于第k个位置。我指的不是基于零或一的索引。我指的是这样一个事实,有时你的解决方案会产生错误的答案。假设我想要从0到36的随机混合整数集中得到5阶统计量。你的答案产生了
1
,我的例子是:
np.random.seed(0);np.划分(np.随机.置换(np.arange(37)),5)[4]
。答案应该是
4
。为了纠正这一点,您需要找到前k个元素的最大值<编码>np.random.seed(0);np.partition(np.random.permutation(np.arange(37)),5)[:5].max()@piRSquared,在您的示例中,0阶统计量是
0
,5阶统计量是
5
。试着做:
np.partition(np.random.permutation)(np.arange(37)),5)[5]
,你会得到
5
的正确答案。您是正确的
np。分区
不会排序,但它所做的一件事是确保
5
位于第五位。
import numpy as np
x = [2, 4, 0, 3, 1]
k = 2
print('The k-th order statistic is:', np.partition(np.asarray(x), k)[k])