Подтвердить что ты не робот

Выполнение максимального количества значений массива numpy

Мне нужен быстрый способ сохранить максимальный размер массива 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, но похоже, что я изобретаю колесо.

4b9b3361

Ответ 1

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])

Ответ 2

Как и было предложено, существует 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])