Python中的数组排序问题

Python中的数组排序问题,python,numpy,Python,Numpy,我试图对数据(x)进行排序,并找出每条记录比任何以前的记录大多少倍。我从范围内的第二条记录(索引1)开始,然后和从索引0到I的最大值进行比较。我经历了一段艰难的时光,我试着将它分解成几个步骤,但我不确定它是如何失败的?有人能提供一些见解吗?非常感谢,希望我能解释清楚 def greater(x): g=0 for i in range(len(x[1:])): if x[i] > np.max(x[:i]): g = g + 1 return

我试图对数据(x)进行排序,并找出每条记录比任何以前的记录大多少倍。我从范围内的第二条记录(索引1)开始,然后和从索引0到I的最大值进行比较。我经历了一段艰难的时光,我试着将它分解成几个步骤,但我不确定它是如何失败的?有人能提供一些见解吗?非常感谢,希望我能解释清楚

def greater(x):
g=0
for i in range(len(x[1:])):
    if x[i] > np.max(x[:i]):
        g = g + 1            
return g
预期结果:

x=[0,1,1,5,4]
g应=2,在记录索引1,3处,您执行的maing循环错误

应该是:

for i in range(1,len(x)):
因为您希望通过值从1循环到长度x,而代码从0循环到长度x减去1

顺便说一句,这与“数组理解”无关


存储当前最大值也会更有效,而不是执行
np.max(x[:i])
(这是线性的)。

您可以使用numpy将其矢量化,如下所示:

>>> x = [0, 1, 1, 5, 4]
>>> np.count_nonzero(x[1:] > np.maximum.accumulate(x)[:-1])
2
要了解正在发生的事情:

>>> np.maximum.accumulate(x)
array([0, 1, 1, 5, 5])
>>> x[1:] > np.maximum.accumulate(x)[:-1]
array([ True, False,  True, False], dtype=bool)
您可以获得
g
增加的位置的索引:

>>> np.nonzero(x[1:] > np.maximum.accumulate(x)[:-1])[0] + 1
array([1, 3], dtype=int64)

正如lejlot所说,没有必要每次都重新计算前面所有列表项的最大值——只需在浏览列表一次时记录正在运行的最大值。这也意味着您不需要不断地重新选择列表,因此您不必跟踪列表中的当前位置—仅跟踪当前项—因此,您也不需要
range()
len()
。这导致了一个非常简单的实现:

def greater(x):
    g = 0
    newmax = x[0]
    for i in x[1:]:
        if i > newmax:
            g += 1
            newmax = i
    return g

它比以前的记录大多少倍?我可以认为这意味着两件完全不同的事情;这两者似乎都与您的代码片段无关。也许发布一些示例输入和预期输出会有所帮助?在给定输入数组的情况下添加预期结果。希望这能很好地解释它。从本质上讲,i比i之前的任何值大多少次。这似乎是可行的,但现在Python崩溃了,没有异常错误报告。非常感谢,先生。为了得到最好的答案,请解释您的代码,不要只发布代码。