numpy: как получить максимальное значение, подобное этому, в numpy? [dубликат]

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

23
задан 7 March 2015 в 22:12

1 ответ

Как было предложено, существует 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])
3
ответ дан 15 August 2018 в 15:36
  • 1
    Нет необходимости извлекать его из пространства scipy namespace. Это numpy ufunc. Дублирование символов numpy в scipy. * Является обратной совместимостью с днями Numeric. – Robert Kern 31 August 2011 в 07:14
  • 2
    Извини за это. Личный предвзятость, я думаю. – Steve Tjoa 1 September 2011 в 03:24

Другие вопросы по тегам:

Похожие вопросы: