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]