python

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

전감자(◔◡◔) 2022. 9. 29. 01:01

-1차원 인덱싱, 슬라이싱 색인 

'''
  1차원 배열(벡터) 색인
  1) 인덱싱 ,슬라이싱  ( 기존 파이썬 문법과 동일 )
     - 기본적으로 위치값을 이용
     - 순방향
     - 역방향
'''
import numpy as np
# 1. 인덱싱
arr = np.array(["A","B","C","D","E","F"])
print(arr[0]) # 순방향
print(arr[-1]) # 역방향

# 2. 슬라이싱
arr = np.array(["A","B","C","D","E","F"])
print( arr[0:4]) # ['A' 'B' 'C' 'D']
print( arr[-5:-1]) # ['B' 'C' 'D' 'E']
print( arr[4:]) # ['E' 'F']
print( arr[:6]) # ['A' 'B' 'C' 'D' 'E' 'F']
print( arr[0:6:2]) # ['A' 'C' 'E']

print( arr[::-1]) #['F' 'E' 'D' 'C' 'B' 'A'] # 역순
print( arr[:]) # ['A' 'B' 'C' 'D' 'E' 'F']
print( arr[...]) # ['A' 'B' 'C' 'D' 'E' 'F']  # 기억할것.

# 차원변경시 ... 사용된다.
print(arr) # ['A' 'B' 'C' 'D' 'E' 'F']
print(arr[..., np.newaxis]) # [['A']['B']..['F']]
print(arr[np.newaxis,...]) # [['A' 'B' 'C' 'D' 'E' 'F']]

 

 

arr [...] :  배열을 그대로 가져올 때 사용 

차원을 바꿀 때 용이 하게 쓰이니 잘 기억해 둘 것 !

 

 

- 1차원 -fancy 색인

'''
  1차원 배열(벡터) 색인
  1) 인덱싱 ,슬라이싱  ( 기존 파이썬 문법과 동일 )
     - 기본적으로 위치값을 이용
     - 순방향
     - 역방향
  2) fancy 색인 ( 정수배열 색인 )
   - 한꺼번에 여러 값 색인
   - 반드시 리스트에 저장하고 지정한다.
   - 임의의 순서지정 가능
   - 순방향,역방향 모두 가능
'''
import numpy as np
# 3. fancy 색인
arr = np.array(["A","B","C","D","E","F"])
print(arr[[0,2,4]]) # ['A' 'C' 'E']
print(arr[[4,1,5]]) # ['E' 'B' 'F']
print(arr[[-1,-4,-3]]) # ['F' 'C' 'D']
# print(arr[-1,-4,-3]) # ['F' 'C' 'D']  # 에러

 

-1차원 boolean 색인

-True 값으로된 부분만 출력된다. 

'''
  1차원 배열(벡터) 색인
  1) 인덱싱 ,슬라이싱  ( 기존 파이썬 문법과 동일 )
     - 기본적으로 위치값을 이용
     - 순방향
     - 역방향
  2) fancy 색인 ( 정수배열 색인 )
   - 한꺼번에 여러 값 색인
   - 반드시 리스트에 저장하고 지정한다.
   - 임의의 순서지정 가능
   - 순방향,역방향 모두 가능
  3) boolean 색인
     - 벡터 연산중에서 비교 연산 활용, 반드시 길이가 같아야 된다.
'''
import numpy as np
# 3. boolean 색인
arr = np.arange(10)
print(arr) # [0 1 2 3 4 5 6 7 8 9]
print(arr[[True,True,True,True,True,False,False,False,False,False]])
print("짝수냐?", arr%2==0) # [ True False  True False  True False  True False  True False]
print("짝수값만 출력", arr[arr%2==0]) # [0 2 4 6 8]
print("5보다 큰값만 출력", arr[arr>5]) # [6 7 8 9]
print("5보다 크고 짝수냐 ?", arr[(arr > 5) & (arr%2==0)]) # [6 8]
print("5보다 크거나 짝수냐 ? ?", arr[(arr > 5) | (arr%2==0)]) # [0 2 4 6 7 8 9]