[데이터분석] Numpy배열 - indexing, slicing
2024. 8. 13. 15:42ㆍAI & DS/머신러닝
Indexing
- 여러 원소를 가지고 있는 개체(리스트, 튜플, 배열 등)에 부여되는 번호
- 파이썬의 List와 동일하게 ndarray도 인덱싱 가능
# 1부터 10까지 수 중 랜덤하게 6개의 수가 추출된 'arr1'이라는 배열
# shape: 3X2인 2차원 배열
arr1 = np.random.randint(1, 11, size = (3, 2))
print(arr1[0,:]) # 1행 출력
print(arr1[1, 0]) # 2행 1열의 원소 출력
Slicing
- 여러 원소를 가지고 있는 객체의 일부를 추출하는 것
- 파이썬의 List와 동일하게 ndarray도 슬라이싱 가능
1. 1차원 배열의 슬라이싱
# 10부터 19까지 연속적인 수로 이루어진 'arr2'라는 배열
# shape: 1차원 배열
arr2 = np.arange(10, 20)
print(arr2)
print(arr2[4:7]) # index가 4~6인 원소 출력
print(arr2[6:]) # index가 6 이상인 원소 출력
arr2[6:]=20 # index가 6 이상인 원소를 모두 20으로 바꾸기
print(arr2)
2. 다차원 배열의 슬라이싱
# 1부터 9까지 연속적인 수로 이루어진 'arr3'라는 배열
# shape: 3X3인 2차원 배열
arr3 = np.arange(1, 10).reshape(3, 3)
print(arr3)
# 2, 3, 5, 6으로 구성된 2차원 배열 출력
print(arr3[:2, 1:])
# :a 0~(a-1)행까지 출력
# a: a열부터 출력 (0행,0열 시작 가정)
# 1행 출력
print(arr3[0])
print(arr3[0, :])
# 2행 출력
print(arr3[1])
print(arr3[1, :])
# print(arr3[a, :a]) # a행, 0~(a-1)행까지 출력 (0행,0열부터 시작 가정)
# 2열 출력
print(arr3[:, 1])
2-1 결측치(NaN)
arr3 = np.arange(1, 10).reshape(3, 3)
print(arr3)
# 2, 3, 5, 6을 모두 결측치로 바꾸기
# 결측치: 데이터에 값이 없는 것 (NaN, null, None)
arr3[:2, 1:] = np.nan
print(arr3)
- 오류발생 → numpy에서 자료형이 float일 때만 결측치 삽입 가능
- float 타입으로 변환 후 결측치 삽입
# numpy에서 자료형이 float일 때만 결측치 삽입 가능
arr3 = arr3.astype(float)
arr3[:2, 1:] = np.nan
print(arr3)
마스킹 연산(boolean 인덱싱)
- 마스킹 연산: 조건에 부합하는 데이터만 추출하는 방법
# 난수가 표준정규분포 따르는 'arr4'라는 배열 생성
# shape: 5X5인 2차원 배열
arr4 = np.random.randn(5, 5)
print(arr4)
# arr4 안의 원소가 양수이면 True, 음수이면 False 출력
print(arr4>0)
# arr4 안의 원소가 음수면 0 삽입
arr4 = np.where(arr4 > 0, arr4, 0) # 0은 broadcasting 되었음
print(arr4)
'AI & DS > 머신러닝' 카테고리의 다른 글
[데이터분석] Pandas - Series (0) | 2024.08.13 |
---|---|
[데이터분석] Pandas (0) | 2024.08.13 |
[데이터분석] Numpy배열 - broadcasting (0) | 2024.08.13 |
[데이터분석] Numpy 배열 (0) | 2024.08.13 |
[데이터분석] 데이터사이언스 개론 (0) | 2024.08.13 |