[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.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) 메서드가 있으며, 각 요소에 함수를 적용하고 반환 된 값을 동일한 크기의 배열로 수집합니다.
from https://stackoverflow.com/questions/28563711/make-a-numpy-array-monotonic-without-a-python-loop by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 1 억 개의 0을 가진 효율적인 파이썬 배열? (0) | 2018.11.22 |
---|---|
[PYTHON] 파이썬 argparse - 선택적 인수이거나 아니면 둘 다 아니다. (0) | 2018.11.22 |
[PYTHON] 빈 목록 부울 값 (0) | 2018.11.21 |
[PYTHON] 파이썬에서 현재 URL 얻기 (0) | 2018.11.21 |
[PYTHON] 파이썬 원시 문자열과 후행 백 슬래시 (0) | 2018.11.21 |