Python

[NumPy] 배열의 인덱싱과 슬라이싱

주댕이 2024. 1. 17. 11:42

# 배열의 인덱싱(Indexing)

  • 배열의 위치나 조건을 지정해 배열의 원소를 선택하는 것
  • 1차원 배열에서 특정 위치의 원소를 선택하는 경우
배열명[위치]
# 1차원 배열 생성
a1 = np.array([0, 10, 20, 30, 40, 50])
a1  # array([ 0, 10, 20, 30, 40, 50])
a1[4]  # 40
# 원소의 값 변경
a1[5] = 70
a1  # array([ 0, 10, 20, 30, 40, 70])

 

  • 1차원 배열에서 여러 개의 원소를 선택하는 경우
배열명[[위치1, 위치2, ..., 위치n]]  # 리스트를 통해 추출: 인덱스 위치를 리스트화
a1[[0, 2, 4]]  # array([ 0, 20, 40])
idx_list = [0, 2, 4]
a1[idx_list]  # array([ 0, 20, 40])

 

  • 2차원 배열에서 특정 위치의 원소를 선택하는 경우
배열명[행_위치, 열_위치]
# 2차원 배열 생성
a2 = np.arange(10, 100, 10).reshape(3, 3)
a2
# array([[10, 20, 30],
#        [40, 50, 60],
#        [70, 80, 90]])
a2[1, 1]  # 50
# 원소의 값 변경
a2[2, 2] = 95
a2
# array([[10, 20, 30],
#        [40, 50, 60],
#        [70, 80, 95]])
# 행 전체 가져오기
a2[0]  # array([10, 20, 30])
# 행 전체 변경
a2[0] = np.array([1, 2, 3])
a2
# array([[10, 20, 30],
#        [40, 50, 60],
#        [70, 80, 95]])

# a2[0] = [1, 2, 3] 과 같다.

 

  • 2차원 배열의 여러 원소를 선택하는 경우
배열명[[행_위치1, 행_위치2, ..., 행_위치n], [열_위치1, 열_위치2, ..., 열_위치n]]
a2[[0, 2], [0, 1]]  # == a2[0, 0], a2[2, 1]
# array([ 4, 80])

 

  • 배열에 조건을 지정해 조건을 만족하는 배열을 선택하는 경우
배열명[조건]
a = np.array([1, 2, 3, 4, 5, 6])
a[a>3]  # 조건식의 True값만 가져옴
# array([4, 5, 6])

 

 

# 배열의 슬라이싱(Slicing)

  • 범위를 지정해 배열의 원소를 선택하는 것
  • 1차원 배열의 경우
배열[시작_위치:끝_위치]
b1 = np.array([0, 1, 2, 3, 4, 5])
b1[1:4]  # array([1, 2, 3])
b1[:3]  # array([0, 1, 2])
b1[2:]  # array([2, 3, 4, 5])
b1[0:4:2]  # array([0, 2])
# 원소의 값 변경
b1[2:5] = np.array([25, 35, 45])
b1  # array([ 0,  1, 25, 35, 45,  5])
b1[3:6] = 60
b1  # array([ 0,  1, 25, 60, 60, 60])

 

  • 2차원 배열의 경우
  • 배열[행_시작_위치:행_끝_위치, 열_시작_위치:열_끝_위치]
     
    • 특정 행을 선택한 후 열을 슬라이싱하는 경우
    • 배열[행_위치][열_시작_위치:열_끝_위치]
# 2차원 배열 생성
b2 = np.arange(10, 100, 10).reshape(3, 3)
b2
# array([[10, 20, 30],
#        [40, 50, 60],
#        [70, 80, 90]])
b2[1:3, 1:3]
# array([[50, 60],
#        [80, 90]])
b2[1:, 1:]
# array([[50, 60],
#        [80, 90]])
b2[1][0:2]  # array([40, 50])
b2[0:2, 1:3] = np.array([[25, 35], [55, 65]])
b2
# array([[10, 25, 35],
#        [40, 55, 65],
#        [70, 80, 90]])
728x90