Максимальное количество значений массива - PullRequest
27 голосов
/ 31 августа 2011

Мне нужен быстрый способ, чтобы сохранить рабочий максимум для массива numpy.Например, если бы мой массив был:

x = numpy.array([11,12,13,20,19,18,17,18,23,21])

Я бы хотел:

numpy.array([11,12,13,20,20,20,20,20,23,23])

Очевидно, я мог бы сделать это с помощью небольшого цикла:

def running_max(x):
    result = [x[0]]
    for val in x:
        if val > result[-1]:
            result.append(val)
        else:
            result.append(result[-1])
    return result

Но мои массивы содержат сотни тысяч записей, и мне нужно вызывать это много раз.Кажется, что для удаления петли должен быть хитрый прием, но я не могу найти ничего, что будет работать.Альтернативой будет написать это как расширение C, но, похоже, я бы заново изобрел колесо.

Ответы [ 2 ]

44 голосов
/ 31 августа 2011

numpy.maximum.accumulate у меня работает.

>>> import numpy
>>> numpy.maximum.accumulate(numpy.array([11,12,13,20,19,18,17,18,23,21]))
array([11, 12, 13, 20, 20, 20, 20, 20, 23, 23])
3 голосов
/ 31 августа 2011

Как и предполагалось, есть scipy.maximum.accumulate:

In [9]: x
Out[9]: [1, 3, 2, 5, 4]

In [10]: scipy.maximum.accumulate(x)
Out[10]: array([1, 3, 3, 5, 5])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...