복붙노트

[PYTHON] 파이썬 루프없이 단조로운 배열 만들기

PYTHON

파이썬 루프없이 단조로운 배열 만들기

난 monotonic (감소라고 가정 해 봅시다) 값의 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])

다음은 그래픽으로 표현한 것입니다.

파이썬 루프를 사용하여이를 수행하는 방법을 알고 있지만, NumPy 기계로 이것을 수행하는 방법이 있습니까?

명확성을위한 파이썬 코드 :

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

해결법

  1. ==============================

    1.np.minimum.accumulate를 사용하여 배열을 이동할 때 최소값을 수집 할 수 있습니다.

    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) 메서드가 있으며, 각 요소에 함수를 적용하고 반환 된 값을 동일한 크기의 배열로 수집합니다.

  2. from https://stackoverflow.com/questions/28563711/make-a-numpy-array-monotonic-without-a-python-loop by cc-by-sa and MIT license