python

[numpy] numpy 2차원 색인 | 인덱싱, 슬라이싱, fangy, boolean

전감자(◔◡◔) 2022. 9. 29. 01:11
'''
  2차원 배열(벡터) 색인
   ==> 기본적으로 arr[행, 열] 형식을 따른다.
   ==> 파이썬은 arr[행][열] 형식을 따른다.

  1) 인덱싱
  2) 슬라이싱
'''
import numpy as np

# 1. 인덱싱
arr = np.arange(9).reshape(3, 3)
print(arr)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]
'''
print("1행만 출력:", arr[0])  # [0 1 2]
print("마지막행만 출력:", arr[-1])  # [6 7 8]
print()
print("1행의 2열 출력:", arr[0, 1])  # 1
print("2행의 마지막열 출력:", arr[1, -1])  # 5
print()
# 2. 슬라이싱
print("1행의 2열부터 끝까지:", arr[0, 1:])  # [1 2]
print("모든 행의 1열만 출력:", arr[:, 0])  # [0 3 6]
print("2행부터 끝까지 1열만 출력:", arr[1:, 0])  # [3 6]

print("2행부터 끝까지 2열부터 끝까지 출력:", arr[1:, 1:])  # [[4 5] [7 8]]

 

-fancy 색인 

'''
  2차원 배열(벡터) 색인
   ==> 기본적으로 arr[행, 열] 형식을 따른다.
   ==> 파이썬은 arr[행][열] 형식을 따른다.

  1) 인덱싱
  2) 슬라이싱
  3) fancy 색인
'''
import numpy as np

# 1. 인덱싱
arr = np.arange(9).reshape(3, 3)
print(arr)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]
'''
print("1행과 3행 출력", arr[[0, 2]])  # [[0 1 2] [6 7 8]]

print("1행과 3행에서 2열 만 출력", arr[[0, 2], 1])  # [1 7]
print("1행과 3행에서 2열부터 끝까지  출력", arr[[0, 2], 1:])  # [[1 2] [7 8]]

print("모든행에서 2열, 3열만 출력", arr[:, [1, 2]])  # [[1 2][4 5][7 8]]

# 특정행의 특정열 색인시 주의하자
print("1행에서는 3열, 3행에서는 1열 출력", arr[[0, 2], [2, 0]])  # [2 6]
print("1행과 3행에서 1열과 3열 출력", arr[[0, 2]][:, [2, 0]])  # [[2 0] [8 6]]

 

-boolean 색인

 

'''
  3) boolean 색인
     - 벡터 연산중에서 비교 연산 활용, 반드시 길이가 같아야 된다.
     - 실행결과는 flat된다. shape 유지가 안됨. 이유는 True값만 반환됨.
     - 논리 연산 적용시  and/or/not 대신에  &  |  ~
'''
import numpy as np
# 3. boolean 색인
arr = np.arange(9).reshape(3,3)
print(arr)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]
'''
print("짝수값만 출력", arr[arr%2==0]) #  [0 2 4 6 8]
print("5보다 큰값만 출력", arr[arr>5]) # [6 7 8]
print("5보다 크고 짝수냐 ?", arr[(arr > 5) & (arr%2==0)]) # [6 8]
print("(5보다 크고 짝수냐)의 부정(not) ?", arr[ ~((arr > 5) & (arr%2==0))]) # [0 1 2 3 4 5 7]
print("5보다 크거나 짝수냐 ? ?", arr[(arr > 5) | (arr%2==0)]) # [0 2 4 6 7 8]