SMALL
넘파이(Numpy)
- 넘파이(Numpy)는 파이썬에서 사용되는 과학 및 수학 연산을 위한 강력한 라이브러리
- 주로 다차원 배열을 다루는 데에 특화되어 있어, 데이터 분석, 머신러닝, 과학 계산 등 다양한 분야에서 널리 사용
- 넘파이 배열은 C 언어로 구현되어 있어 연산이 빠르고 효율적
- 넘파이 배열은 특히 큰 데이터셋에서 수치 연산을 수행할 때 뛰어난 성능을 보입
- 또한 메모리 사용을 최적화하고 효율적으로 관리합니다
- 설치
! pip install numpy
- import
import numpy as np #별칭 사용
1. ndarray ( n-dimensional array)
- 다차원 배열
- ndarray 은 생성 될 때 크기와 자료형이 결정된다. (다만, 자료형은 동일해야 함)
- 다차원 배열은 1차원, 2차원, 3차원 등 다양한 차원을 가질 수 있다.
* 다양한 수학적 연산 지원
* 메모리 내에서 연속적 저장 : 빠른 계산 가능
- 리스트의 경우
# 리스트
list1 = [1, 2, 3, 4]
list2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
print(list1)
print(list2)
print(type(list1))
print(type(list2))
print(type(list1[0]))
print(type(list2[0]))
![]() |
- 넘파이의 경우_1차원
import numpy as np
# ndarray
# 1차원 배열
ndarr1 = np.array([1, 2, 3, 4])
print(ndarr1)
print(type(ndarr1))
print(type(ndarr1[0]))
![]() ✔ 넘파이 생성 변수 = 넘파이별칭.array |
- 넘파이의 경우_2차원
# 2차원 배열
ndarr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(ndarr2)
print(type(ndarr2))
print(type(ndarr2[0]))
![]() |
2. List와 ndarray변환
- 데이터 타입을 다른 데이터 타입으로 변환할 수 있다
- 리스트에서 배열로의 변환은 np.array() 함수를 사용하고
배열에서 리스트로의 변환은 tolist() 함수를 사용
- np.array( )
# 리스트를 nparray로 변환
list1 = [1, 2, 3, 4]
ndarr1 = np.array(list1)
print(ndarr1)
print(type(ndarr1))
![]() ✔ 넘파이 변환 방법 넘파이 = 별칭.array (리스트) |
- tolist( )
# ndarray를 리스트로 변환
list2 = ndarr1.tolist()
print(list2)
print(type(list2))
![]() ✔ 리스트 변환 방법 리스트 = 넘파이.tolist() |
3. ndarray의 데이터 타입
- 넘파이의 ndarray는 동일한 자료형을 가지는 원소들로 이루어져 있으며, 다양한 데이터 타입을 지원
- 리스트의 경우: 다양한 데이터타입을 저장할 수 있음
list1 = [1, 3.14, 'Python', '😎', True]
print(list1)
print(type(list1[0]))
print(type(list1[1]))
print(type(list1[2]))
print(type(list1[3]))
print(type(list1[4]))
![]() |
- 넘파이의 경우 : 동일한 자료형만 가능
# 같은 자료형
ndarr1 = np.array([1, 2, 3, 4])
print(ndarr1)
print(type(ndarr1))
print(type(ndarr1[0]))
print(type(ndarr1[1]))
![]() |
- 넘파이의 경우 : 자동형변환(1)
#int와 float 동시에 있는 경우
ndarr2 = np.array([1, 2, 3.14, 4])
print(ndarr2)
print(type(ndarr2))
print(type(ndarr2[0]))
print(type(ndarr2[2]))
![]() 모든 요소가 float로 바뀜 |
- 넘파이의 경우 : 자동형변환(2)
# int와 float, boolen 동시에 있는 경우
ndarr3 = np.array([1, 2, 3.14, True])
print(ndarr3)
print(type(ndarr3))
print(type(ndarr3[0]))
print(type(ndarr3[1]))
print(type(ndarr3[2]))
![]() 가장 큰 데이터타입인 float로 모든 요소가 바뀜 (Bool은 데이터 타입이 가장 작음) |
- 넘파이의 경우 : 자동형변환(3)
# 문자형이 있는 경우
ndarr4 = np.array(['1', 2, 3.14, True])
print(ndarr4)
print(type(ndarr4))
print(type(ndarr4[0]))
print(type(ndarr4[2]))
print(type(ndarr4[3]))
![]() 가장 큰 데이터 타입인 str로 모든 요소가 바뀜 |
- 넘파이의 경우 : 자동형변환(4)
# 데이터 타입 지정(1)
ndarr5 = np.array([1, 2, 3.14, True], dtype=int) # 모든 요소를 int로 변경
print(ndarr5)
print(type(ndarr5[0]))
print(type(ndarr5[1]))
print(type(ndarr5[2]))
print(type(ndarr5[3]))
![]() 지정해준 int 요소로 모두 바뀜 단, float형은 소수점 뒤를 빼고 정수만 남음 |
- 넘파이의 경우 : 자동형변환(5)
# 데이터 타입 지정(2)
ndarr6 = np.array(['1', 2, 3.14, True], dtype=int)
print(ndarr6)
print(type(ndarr6[0]))
print(type(ndarr6[1]))
print(type(ndarr6[2]))
print(type(ndarr6[3]))
![]() 따옴표가 있는 int형은 int로 변환 가능! |
- 넘파이의 경우 : 자동형변환(6)
# 데이터 타입 지정(3)
ndarr7 = np.array(['1', '2', '3.14', True], dtype=int)
print(ndarr6)
print(type(ndarr6[0]))
print(type(ndarr6[1]))
print(type(ndarr6[2]))
print(type(ndarr6[3]))
![]() 따옴표가 있는 float형은 int로 변환되지 않음! |
- 넘파이의 경우 : 자동형변환(7)
ndarr8 = np.array(['1', 2, 3.14, 'True'], dtype=int)
print(ndarr8)
print(type(ndarr8[1]))
![]() int로 추론할수 없는 경우 error 발생 |
4. ndarray 인덱싱과 슬라이싱
- 넘파이의 ndarray는 리스트와 유사하게 인덱싱과 슬라이싱을 지원
- 1차원_차원보기
# ndarray 인덱싱과 슬라이싱
ndarr1 = np.array([ '🍉','🍋','🍌', '🍍','🍓'])
print(ndarr1)
print(ndarr1.shape) # 차원
![]() ✔ 차원보기 넘파이.shape (5,) : 5행(5개의 데이터가 있다) |
- 1차원_인덱싱
# 인덱싱
print(ndarr1[0])
print(ndarr1[4])
print(ndarr1[-1])
print(ndarr1[-2])
![]() 원하는 인덱스 가져오기 |
- 1차원_슬라이싱
# 슬라이싱
print(ndarr1[0:3])
print(ndarr1[2:])
print(ndarr1[:3])
![]() - 인덱스 0~2까지 - 인덱스 2~끝 - 인덱스 처음~3 |
- 2차원_차원보기
# 2차원 배열인 경우
ndarr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(ndarr2d)
print(ndarr2d.shape)
![]() ✔ 차원보기 넘파이.shape (3,4) : 3행 4열(12개의 데이터가 있다) |
- 2차원_인덱싱(행)
# 0행 가져오기
print(ndarr2d[0])
print(ndarr2d[0,])
print(ndarr2d[0,:])
![]() ![]() ✔ 0행 가져오기 넘파이[0] 넘파이[0,] 넘파이[0,:] * 세가지 방법 가능 |
- 2차원_인덱싱(열)
# 0열 가져오기
print(ndarr2d[:,0])
![]() ✔ 0열 가져오기 넘파이[:.0] * 열을 가져오는 방법은 1가지! |
5. Fancy Indexing
- 넘파이에서 배열을 인덱싱하는 강력하고 유연한 방법 중 하나
- 정수 배열이나 불리언 배열을 사용하여 배열의 일부를 선택하는 방법
- 이를 통해 여러 개의 요소를 한 번에 선택하거나 조건에 맞게 선택할 수 있다
- 1차원
# Fancy Indexing
# 1차원
ndarr1 = np.array([10, 15, 2, 8, 20, 90, 85, 44, 23, 32])
idx = [2, 5, 9]
print(ndarr1[idx])
![]() - idx (인덱스를 나타내는 리스트) : ndarr1 배열에서 선택할 요소의 인덱스를 나타냅니다. |
- 2차원
# 2차원
ndarr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(ndarr2d[[0,1], :])
![]() ❔ 넘파이[[0,1],:] [[0,1],__] : 1행~2행을 조건에 맞게 출력 [___, : ] : 조건-모든 열을 선택 |
6. Boolean Indexing
- 넘파이에서 배열의 원소를 선택하는 강력하고 유용한 방법 중 하나
- 불리언(Boolean) 값으로 이루어진 배열을 사용하여 조건을 충족하는 원소만 선택하는 방식
- 1차원_Boolean 인덱싱
# Boolean Indexing
ndarr1 = np.array([ '🍉','🍋','🍌', '🍍','🍓'])
sel = [True, False, True, True, False]
print(ndarr1[sel])
![]() True인 것만 출력 |
- 1차원_Boolean 인덱싱(오류)
# Boolean Indexing
ndarr1 = np.array([ '🍉','🍋','🍌', '🍍','🍓'])
sel = [True, False, True]
print(ndarr1[sel])
![]() 단, 자리숫가 안 맞으면 error |
- 2차원 _Boolean 인덱싱
# Boolean Indexing
# 2차원인 경우
ndarr2d = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(ndarr2d > 7) # true, false 인지 판별
print('=' * 40)
print(ndarr2d[ndarr2d > 7])
![]() 조건에서 true 인 것들만 출력 |