1. Numpy(넘파이) 기본
- 대수, 행렬, 통계 등 수학 및 과학연산을 위한 라이브러리
- ndarray 라는 다차원 배열을 데이터로 나타내고 처리하는데 특화
- 파이썬의 기본 List에 비해 실행속도가 빠르고 짧고 간결한 코드 구현이 가능
- Numpy는 외부 라이브러리이므로, 설치 후 사용
2. Numpy 설치
pip install numpy
import numpy as np
# 에러 안 나면 정상적으로 설치 된 것
▶ Numpy 버전 확인
print(np.__version__)
▶ Numpy 업그레이드 / 다운그레이드
pip install numpy -- upgrade # 업그레이드
pip install numpy == 1.20 # 특정 버전으로 업그레이드/다운그레이드 가능
3. Numpy 활용 기본
▶ Numpy 패키지의 배열을 사용하는 이유
1. 리스트: 서로 다른 타입의 값을 변수에 담을 수 있음 ↔ 배열: 담겨진 모든 값이 같은 타입
2. 리스트: 데이터수가 변경됨 ↔ 배열: 데이터 수를 변경 할 수 없음
▶ .array()
: 파이썬 리스트처럼 순차형 객체를 넘겨받아 새로운 넘파이 배열 생성
* 1차원 배열
data1 = [1, 2, 2.5, 3, 4]
array1 = np.array(data1)
print(array1)
# [1, 2, 2.5, 3, 4]
* 2차원 배열
data2 = [[1,2,3,4,5], [6,7,8,9,10]]
array2 = np.array(data2)
print(array2)
# [[1,2,3,4,5]
# [6,7,8,9,10]]
▶ .arange()
: 파이썬의 range()함수와 비슷한 기능을 하는 함수
* 매개변수에 배열 개수만 지정해서 생성하기
np.arange(10)
# [0,1,2,3,4,5,6,7,8,9]
* np.arange(시작값, 종료값, 단계지정)
np.arange(5, 30, 3)
# array([5,8,11,14,17,20,23,26,29]
# 5 ~ 29 사이의 숫자에 +3을 한 숫자들을 출력한 결과
▶ .ndim(2차원 배열) / shape(배열의 크기)
print(array2.ndim)
print(array2.shape)
# 2
# (2,5) # 2차원 배열, 원소 5개
▶ .zeros() / .ones()
: .zeros()는 지정한 길이나 모형에 맞추어 0을 채운 배열
: .ones()는 1로 채운 배열
* np.zeros( )
np.zeros((5,10))
* np.ones( )
np.ones((2, 3, 8))
4. 데이터타입 변환
▶ .dtype
: Numpy에서 행렬의 data type을 알아보기 위해 사용하는 함수
print(array1.dtype)
print(array2.dtype)
# float64
# int32
* data type 정리
i | integer | 정수 |
b | boolean | True or False |
u | unsigned integer | 자연수(0도 포함) |
f | float | 실수 |
c | complex float | 복소수(파이썬 허수 >> j ) |
M | datetime | 날짜 |
S | string | |
U | unicode string |
dtype 종류 | dtype 코드 | 설명 |
int8 | i1 | 부호가 있는 8비트(1byte) 정수형 |
int16 | i2 | 부호가 있는 16비트 정수형 |
int32 | i4 | 부호가 있는 32비트 정수형 |
int64 | i8 | 부호가 있는 64비트 정수형 |
float16 | f2 | 반정밀도 부동소수점수(실수) |
float32 | f4 또는 f | 단정밀도 부동소수점수(실수) |
float64 | f8 또는 d | 배정밀도 부동소수점수(실수), 파이썬의 float객체와 호환됨 |
float128 | f16 또는 g | 확장 정밀도 부동소수점수(실수) |
bool | ? | True 또는 False 값을 갖는 불리언형 |
object | 0 | 파이썬 객체형 |
string_ | S | 고정된 길이의 아스키 문자열형 (각 문자는 1byte) |
▶ data type 변환 _ 'dtype = ' 으로 지정해주기
array1 = ['-1']
print(np.array(array1, dtype = np.int32).dtype)
# (array1의 데이터타입을 int32로 바꾼 것)의 데이터타입을 print 해봐라.
# int32
▶ data type 변환 _ 'astype() ' 으로 변경하기
array2_float = array2.astype(np.float64)
array2_float.dtype
# dtype('float64')
5. 난수 생성하기
1. 넘파이의 random 이라는 서브 모듈로 다양한 종류의 확률 분포를 기반으로 하는 표준값을 생성하는 함수
2. 파이썬에서도 비슷한 기능의 내장 모듈인 random이 있지만 한 번에 하나의 값만 생성할 수 있음
3. rand() : 0부터 1 사이의 균일분포에서 난수 matrix array 생성
randn() : 가우시안 표준 정규분포에서 난수 matrix array 생성
randint() :균일 분포의 정수 난수 1개 생성
▶ 난수 생성 전 시드값 설정해놓기
np.random.seed(1000) # 1000이라는 숫자 안에서 난수 추출
▶ rand() : [0-1 균등분포]
np.random.rand(10)
▶ randn() : [표준정규분포]
np.random.randn(10)
np.random.randn(5, 3)
▶randint() : [정수]
np.random.randint(5, 25, size=(3, 8)
# 5 ~ 25까지의 숫자 중 난수 생성, 3차원 배열, 원소 8개씩
▶ .normal : [정규분포]
np.random.normal(size=(5, 3))
▶ .shuffle( )
: 배열 안의 숫자 순서 섞어서 출력하기
np.random.shuffle(data)
data
▶ .choice([리스트])
: 리스트 안의 원소를 랜덤하게 출력
np.random.choice(['apple','banana','orange'], 8)
# apple, banana, orange를 8번 랜덤하게 선택해서 출력해줌
▶ replace = True / False
* True : 배열 안의 숫자 중복 출력 허용O
* False : 배열 안의 숫자 중복 출력 허용X
np.random.choice(10, 5, replace = True)
np.random.choice(10, 5, replace = False)
6. Numpy 주요 함수
* len(array) : 길이
* np.mean(array) 또는 array.mean() : 평균값
* np.median(array) : 중앙값
* np.sdt(array) : 표준편차, 표본분산
* np.var(array) : 분산
* np.min(array) : 최솟값
* np.max(array) : 최댓값
* np.sum(array) : 합계
* np.cumsum(array) : 누적 합계
* np.cumprod(array) : 누적 곱
* np.percentile(array, 0) : 사분위값 (0 대신 25, 50, 75, 100 각각 적어주면 각 분위값 출력)
7. 집합 관련 함수
▶ np.unique( ) : 유일값
▶ np.intersect1d( , ) : 공통적으로 존재하는 값을 배열로 반환
댓글