복붙노트

[PYTHON] numpy에서 인접하지 않은 범위를 여러 개 색인으로 만듭니다.

PYTHON

numpy에서 인접하지 않은 범위를 여러 개 색인으로 만듭니다.

1d numpy 배열 (또는 벡터)에서 여러 개의 인접하지 않은 범위를 선택하고 싶습니다.

가정하자.

>>> idx = np.random.randint(100, size=10)
array([82,  9, 11, 94, 31, 87, 43, 77, 49, 50])

이것은 물론 작동합니다.

>>> idx[0:3]
array([82,  9, 11])

그리고 이것은 개별 지표를 통해 가져옵니다.

>>> idx[[0,3,4]]
array([82, 94, 31])

하지만 범위 0 : 3 및 7 :을 선택하려면 어떻게해야합니까?

난 노력 했어:

>>> idx[[0:3,7:]]
SyntaxError: invalid syntax

이 작업을 수행하는 간단한 방법이 있습니까? 아니면 별도로 생성하고 연결해야합니까?

해결법

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

    1.색인 생성 전후에 연결해야합니다. np.r_는 쉽게 해줍니다.

    색인 생성 전후에 연결해야합니다. np.r_는 쉽게 해줍니다.

    In [116]: idx=np.array([82,  9, 11, 94, 31, 87, 43, 77, 49, 50])
    In [117]: np.r_[0:3,7:10]
    Out[117]: array([0, 1, 2, 7, 8, 9])
    In [118]: idx[np.r_[0:3,7:10]]
    Out[118]: array([82,  9, 11, 77, 49, 50])
    

    np.r_는 슬라이스를 확장하고 연결합니다.

    분할 영역과 목록을 혼합 할 수 있습니다.

    In [120]: np.r_[0:3,7:10,[0,3,4]]
    Out[120]: array([0, 1, 2, 7, 8, 9, 0, 3, 4])
    

    인덱싱 전에 연결하는 것이 아마도 이후보다 빠르지 만, 이와 같이 1 차원 어레이에서는 차이가 크지 않다고 생각합니다.

  2. from https://stackoverflow.com/questions/34188620/index-multiple-non-adjacent-ranges-in-numpy by cc-by-sa and MIT license