파이썬/파이썬 심화

[파이썬 심화] 1-2. NumPy 배열 인덱싱

Harvie 2023. 6. 1. 08:00
반응형

인덱싱

  • 기존의 인덱싱과 매우 유사
import numpy as np

a = np.array([0,1,2,3,4])

print(a) #[0 1 2 3 4]
print(a[0]) # 0
print(a[1]) # 1
print(a[-1]) # 4

 

  • n차원 일 때는 콤마( , )로 구분
import numpy as np

a = np.array([[0,1,2],[3,4,5])

print(a)
'''
결과
[[0 1 2]
 [3 4 5]]
'''
print(a[0,0]) # 0
print(a[0,1]) # 1
print(a[1,0]) # 3
print(a[-1,-1]) # 5

슬라이싱

  • 기존의 인덱싱과 매우 유사
a = np.array([0,1,2,3,4])

print(a) # [0 1 2 3 4]
print(a[1:3]) # [1 2]
print(a[3:]) # [3 4]
print(a[:1]) # [0]
print(a[:]) # [0 1 2 3 4]

 

  • n차원 일 때
na = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])

print(a)
'''
결과
[[0 1 2 3]
 [4 5 6 7]
 [8 9 10 11]]
'''
print(a[0,1:3]) # [1 2]
print(a[1:3,0]) # [4 8]
print(a[0:2,0:2])
'''
결과
[[0 1]
 [4 5]]
'''
print(a[1,:]) # [4 5 6 7]
print(a[:,2]) # [2 6 10]
print(a[:,:])
'''
결과
[[0 1 2 3]
 [4 5 6 7]
 [8 9 10 11]]
'''

배열 인덱싱 (array indexing)

 - 기존의 인덱싱 혹은 슬라이싱 방식이 아닌 '위치 정보' 배열을 활용  ->  불(Boolean) 배열과 정수 배열 방식이 존재

 - '팬시 인덱싱(fancy indexing)'이라고도 부름

 

불 배열 인덱싱

# 짝수 원소만 골라내기
a = np.array([0,1,2,3,4,5]) # 원래 배열
idx = np.array([True,False,True,False,True,False]) # 인덱스 배열

print(a[idx]) # [0 2 4]
a = np.array([0,1,2,3,4,5])
idx = a%2==0

print(idx) # [True False True False True False]
print(a[idx]) # [0 2 4]
print(a[a%2==0]) # [0 2 4]
print(a[a%2==1]) # [1 3 5]

 

정수 배열 인덱싱

# 짝수번째 위치에 있는 원소만 골라내기
a = np.array([10,20,30,40,50,60])
idx = np.array([0,2,4]) # 위에 배열과 크기가 달라도 상관 없음

print(a[idx]) # [10 30 50]
# 짝수번째 위치에 있는 원소만 골라내기
a = np.array([10,20,30,40,50,60])
idx = np.array([0,0,0,2,2,2,2,4,4]) # 위에 배열과 크기가 달라도 상관 없음

print(a[idx]) # [10 10 10 30 30 30 30 50 50]

 

다차원 배열 인덱싱

a = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])

print([:,[True,False,False,True]])
'''
결과
[[0 3]
 [4 7]
 [8 11]]
'''
print(a[[0,0,2,2,1,1],:])
'''
결과
[[0,1,2,3]
 [0,1,2,3]
 [8,9,10,11]
 [8,9,10,11]
 [4,5,6,7]
 [4,5,6,7]]
'''
print(a[1:3,[3,2,1,0]])
'''
결과
[[7 6 5 4]
 [11 10 9 8]]
'''

 

반응형