코딩하는 타코야끼

[NumPy] 2'_배열 원소 조회 / 배열 형태 변경_연산 본문

[T.I.L] : Today I Learned/Python

[NumPy] 2'_배열 원소 조회 / 배열 형태 변경_연산

가스오부시 2023. 3. 29. 19:15
728x90
반응형

인덱싱과 슬라이싱을 이용한 배열의 원소 조회 및 변경

배열 인덱싱(Indexing)

index

  • 배열내의 원소의 식별번호
  • 0부터 시작

indexing

- ****– index를 이용해 원소 조회
- [ ] 표기법 사용

구문

- ndarray[index]
    - 양수는 지정한 index의 값을 조회한다.
  • 음수는 뒤부터 조회한다.
    • 마지막 index가 -1
  • 2차원배열의 경우
    • arr[0축 index, 1축 index]
    • 파이썬 리스트와 차이점
  • N차원 배열의 경우
    • arr[0축 index, 1축 index, ..., n축 index]
  • 팬시(fancy) 인덱싱
  • 여러개의 원소를 한번에 조회할 경우 리스트에 담아 전달한다.
  • 다차원 배열의 경우 각 축별로 list로 지정
  • arr[[1,2,3,4,5]]
    • 1차원 배열(vector): 1,2,3,4,5 번 index의 원소들 한번에 조회
  • arr[[0,3], [1,4]]
    • [0,3] - 1번축 index list, [1,4] - 2번축 index list
    • 2차원 배열(matrix): [0,1], [3,4] 의 원소들 조회
      스크린샷 2023-03-28 오후 8.39.41.png
    • 스크린샷 2023-03-28 오후 8.39.33.png

코드리뷰

스크린샷 2023-03-29 오후 7.01.15.png스크린샷 2023-03-29 오후 7.01.31.png

  • 1. 조회.
  • a[1] >> 1
  • 2. 여러 index들의 값 조회 -> fancy indexing => index들을 리스트로 묶어서 전달.
  • a[[1,3,2,7]] >>array([1, 3, 2, 7])
  • 3. 변경.
  • a[1] = 1000 a >> array([ 0, 1000, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
  • 4. 일괄변경
      a[[8, 9, 10]] = 8000, 9000, 10000
      a
      >>array([    0,  1000,  5000,     3,  5000,  5000,     6,     7,  8000,
              9000, 10000,    11,    12,    13,    14,    15,    16,    17,
                18,    19,    20,    21,    22,    23,    24,    25,    26,
                27,    28,    29])
  • a[[2, 4, 5]] = 5000 a >>array([ 0, 1000, 5000, 3, 5000, 5000, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
  • 5. ( 30 , ) 1차원배열을 ( 5 , 6 ) 2차원배열로 reshape.
    • size만 동일하면 reshape 가능!!!!
      a2[0] # 0축의 index 0을 조회
      a2[0,3] # a[axis0, axis1]
      a2[-1,-1]
      >>29
    • a2 = np.arange(30).reshape(5, 6) a2 >>>array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29]])
  • 6. Fancy indexing 으로 조회.
      a2[[0,3], [2,4]]
      >>array([ 2, 22])
    • [ 0 , 2 ] 와 [ 3 , 4 ]를 조회한 것이다.
      a3[0,1,1] 
      a3[1,1,2]
      >>11
      a3[[0,1],[1,1],[1,2]]
      >>array([ 4, 11])
    • array([ 2, 22])array([ 2, 22]) >>array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]])
  • a2[0, 2] a2[3, 4] >>22

슬라이싱

  • 배열의 원소들을 범위로 조회한다.
  • ndarry[start : stop : step ]
    • start : 시작 인덱스. 기본값 0
    • stop : 끝 index. stop은 포함하지 않는다. 기본값 마지막 index
    • step : 증감 간격. 기본값 1

다차원 배열 슬라이싱

  • 각 축에 slicing 문법 적용
  • 2차원의 경우
    • arr [0축 slicing, 1축 slicing]
      • arr[:3, :]
    • , 로 축을 구분한 다중 슬라이싱 사용
  • 다차원의 경우
    • arr[0축 slicing, 1축 slicing, ..., n축 slicing]
  • slicing과 indexing 문법은 같이 쓸 수 있다.

슬라이싱은 원본에 대한 View

  • slicing한 결과는 새로운 배열을 생성하는 것이 아니라 기존 배열을 참조한다.
  • slicing한 배열의 원소를 변경하면 원본 배열의 것도 바뀐다.
  • 배열.copy()
    • 배열을 복사한 새로운 배열 생성
    • 복사후 처리하면 원본이 바뀌지 않는다.
    • 스크린샷 2023-03-28 오후 8.42.51.png
반응형