Сделать монохромный массив без контура Python

У меня есть 1D массив значений, который должен быть монотонным (скажем, уменьшающимся), но есть случайные области, где значение увеличивается с индексом.

Мне нужен массив, в котором каждый регион заменяется значением, непосредственно предшествующим ему, так что результирующий массив сортируется.

Поэтому, если заданный массив:

a = np.array([10.0, 9.5, 8.0, 7.2, 7.8, 8.0, 7.0, 5.0, 3.0, 2.5, 3.0, 2.0]) 

Я хочу, чтобы результат был

 b = np.array([10.0, 9.5, 8.0, 7.2, 7.2, 7.2, 7.0, 5.0, 3.0, 2.5, 2.5, 2.0]) 

Вот графическое представление:

пример

Я знаю, как добиться этого с помощью цикла Python, но есть ли способ сделать это с помощью оборудования NumPy?

Код Python для ясности:

 b = np.array(a) for i in range(1, b.size): if b[i] > b[i-1]: b[i] = b[i-1] 

One Solution collect form web for “Сделать монохромный массив без контура Python”

Вы можете использовать np.minimum.accumulate для сбора минимальных значений при перемещении по массиву:

 >>> np.minimum.accumulate(a) array([ 10. , 9.5, 8. , 7.2, 7.2, 7.2, 7. , 5. , 3. , 2.5, 2.5, 2. ]) 

В каждом элементе массива эта функция возвращает минимальное значение, полученное до сих пор.

Если вы хотите, чтобы массив был монотонным, вы можете использовать np.maximum.accumulate .

Многие другие универсальные функции в NumPy имеют метод accumulate для моделирования цикла с помощью массива, применения функции к каждому элементу и сбора возвращаемых значений в массив того же размера.

  • Вложение вектора в массив, индексированный другим массивом
  • Как написать условный код, который совместим как с обычными значениями Python, так и с массивами NumPy?
  • Использование векторизации Numpy для функций, возвращающих векторы
  • Сделать массив 2D Numpy из координат
  • Как накапливать массив по индексу в numpy?
  • Как писать код в векторном виде вместо использования циклов?
  • Как векторизовать функцию, содержащую оператор if?
  •  
    Interesting Posts for Van-Lav

    Python: почему потоковая функция медленнее, чем не поток

    Передача имени столбца в инструкции SELECT в Python

    Как вычислить «EMD» для 2-х массивов numpy, т.е. «гистограмма», используя opencv?

    Как проверить иерархию классов Python?

    Эффективность при использовании большой структуры данных в функции в Python

    Как проверить последовательности, которые не являются строковыми, используя стандартную библиотеку Python 3

    Как отправить массив с помощью request.post (Python)? «Ошибка значения: слишком много значений для распаковки»

    Ошибка при установке pydev

    PyCharm: папка версии .idea, поддерживающая различные интерпретаторы для разработчиков

    Простая защита лицензии для приложения Python

    Создание группы в области данных в пандах

    Python: Numpy __deepcopy__ TypeError

    Python / Django Конкатенация строки в зависимости от того, существует ли эта строка

    login_required decorator не работает, флажок-вход разрешает анонимным пользователям

    Можно ли разделить модуль SWIG для компиляции, но воссоединиться с ним при связывании?

    Python - лучший язык программирования в мире.