- Numpy란?
* 파이썬으로 과학 연산을 쉽고 빠르게 할 수 있게 만든 외부 패키지
* 다차원 배열 데이터를 효과적으로 처리할 수 있음
- Numpy 패키지 불러오기
import numpy as np # Numpy 라이브러리를 불러오기 # ModuleNotFoundError: No module named '~~' 오류 : ~~ 라이브러리 설치하기!
# !pip install ~~ : 가상환경 말고 주피터랩 안에서 임시로 설치하는 방법
print(np.__version__) # 불러왔는지 확인하기
# 1.26.3
위와 같이 선언하면 Numpy를 이용할 때 numpy를 다 적는 대신 np로 줄여서 작성 가능
- 배열 객체(array object) 생성
num1 = [1,2,3,4] # 리스트 형식
arr1 = np.array(num1) # 데이터를 numpy 배열로 변경
arr1
# array([1, 2, 3, 4])
위 배열 객체의 데이터 타입을 'ndarray.dtype'을 통해 확인할 수 있다.(ndarray : Numpy의 배열 객체)
a1.dtype # 데이터 타입 확인
# Python : int # Numpy : int8, int16, int32, int64
# dtype('int32')
# int32는 32비트 정수 타입이라는 뜻이다.
np.array([0.5, 2, 0.01, 8]).dtype
# dtype('float64')
# float64 : 64비트 실수 타입
정수와 실수가 혼합되어 있을 때 Numpy는 아래처럼 모두 실수로 변환한다.
np.array([0.5, 2, 0.01, 8])
# array([0.5 , 2. , 0.01, 8. ])
* Numpy는 다차원 배열도 생성할 수 있다.
- 범위를 지정해 배열 생성
* arrange()를 이용해 Numpy 배열을 생성할 수 있다.
* 형식 : np.arrange( start, stop, step)
: start부터 시작해서 stop 전까지 step만큼 계속 더해 배열 생성
: step이 1인 경우 생략할 수 있고, start가 0인 경우에도 생략할 수 있다.
* 예시
np.arange(0, 10, 2)
# array([0, 2, 4, 6, 8])
np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 0(start)부터 10(stop) 전까지 1(step) 간격으로 생성
위와 같은 1차원 배열에 '.reshape(m,n)' 를 추가하면 m * n 형태의 2차원 배열로 변경할 수 있다.(m : 행, n: 열)
np.arange(12).reshape(4,3)
# array([[ 0, 1, 2],
# [ 3, 4, 5],
# [ 6, 7, 8],
# [ 9, 10, 11]])
* m * n 배열에 들어갈 원소 개수가 부족하면 에러가 발생하니 주의
np.arange(12).reshape(2,2,3) # 두 개의 2*3 행렬 출력
# array([[[ 0, 1, 2],
# [ 3, 4, 5]],
# [[ 6, 7, 8],
# [ 9, 10, 11]]])
Numpy 배열의 형태를 알기 위해서는 'ndarray.shape'를 실행하면 된다.
b1 = np.arange(12).reshape(4,3)
b1.shape # 출력값 튜플
# (4, 3)
# 2차원 배열
b2 = np.arange(5)
b2.shape
# (5,)
# 1차원 배열 표시 방법 : (n,)
linspace()를 사용해 범위의 시작과 끝을 지정하고 데이터 개수를 지정하여 Numpy 배열을 생성할 수 있다.
* 형식 : np.linspace(start, stop, num)
: start부터 stop까지 num개의 Numpy 배열을 생성
* 예시
np.linspace(0,10,5) # 0과 10까지 5개의 배열이 있도록 만들어달라
# array([ 0. , 2.5, 5. , 7.5, 10. ])
np.linspace(0, np.pi, 20) # np.pi : Numpy에서 파이를 입력할 때 이용
# array([0. , 0.16534698, 0.33069396, 0.49604095, 0.66138793,
# 0.82673491, 0.99208189, 1.15742887, 1.32277585, 1.48812284,
# 1.65346982, 1.8188168 , 1.98416378, 2.14951076, 2.31485774,
# 2.48020473, 2.64555171, 2.81089869, 2.97624567, 3.14159265])
zero()와 ones()를 사용하면 모든 원소가 0 혹은 1인 다차원 배열을 만들 수 있다.
* 예시
np.zeros(10) # 원소의 개수가 10개인 1차원 배열 생성
# array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((2,2)) # 2 * 2의 2차원 배열 생성
# array([[0., 0.],
# [0., 0.]])
np.ones(10) # 모든 원소가 1인 1차원 배열 생성
# array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
np.ones((2,2)) # 2 * 2 배열의 2차원 배열 생성
# array([[1., 1.],
# [1., 1.]])
단위행렬 생성도 가능하다.(단위행렬 : n * n인 정사각형 행렬에서 주 대각선이 모두 1이고 나머지는 0인 행렬)
arr_I = np.eye(3)
arr_I
# array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
- 배열의 데이터 타입 변환
* Numpy 데이터의 형식
* 예시
np.array(['1.5', '0.62'])
# array(['1.5', '0.62'], dtype='<U4')
# dtype='<U4' : Numpy 데이터 형식이 유니코드이고 문자의 수는 최대 4개
* 데이터 형 변환은 astype()으로 할 수 있다.
arr = np.array(['1.5', '0.62'])
num_arr = arr.astype(float) # astype을 통해 숫자 형태로 변경 # float: 실수
num_arr.dtype
# dtype('float64')
# 유니코드에서 실수로 dtype 변경됨
num_f1 = np.array([10, 21, 0.549, 4.75, 5.98])
num_f1 = num_f1.astype(int)
num_f1
# array([10, 21, 0, 4, 5])
# 실수(float) 데이터 타입이 정수(int)로 바뀜
- 난수 배열의 생성
* 난수 : 임의의 숫자
* 실수 난수 배열을 생성하는 rand()와 정수 난수 배열을 생성하는 randint()가 있음
* 형식
np.random.rand(do, d1, ..., dn)
# rand() 함수 : 0 이상 1 미만 사이의 '실수' 난수를 갖는 Numpy 배열 생성
# 괄호 안()은 난수 배열 형태
np.random.randint(low, high, size)
# randint() 함수 : low, high 사이의 '정수' 난수를 갖는 배열 생성.
# size는 배열 형태를 지정하는 것
# low가 입력되지 않으면 0으로 간주, size가 입력되지 않으면 1로 간주
* 예시
np.random.rand(2, 3)
# array([[0.86285307, 0.35853185, 0.29890949],
# [0.49654064, 0.92957784, 0.18903782]])
np.random.randint(1, 100, 10)
# array([39, 59, 21, 13, 34, 72, 91, 32, 15, 12])
np.random.randint(10, size=(3,4))
# array([[0, 6, 2, 0],
# [6, 2, 7, 5],
# [3, 3, 5, 4]])
'Python' 카테고리의 다른 글
[pandas] 데이터 불러오기 (0) | 2024.01.06 |
---|---|
pandas 간단 정리 (1) | 2024.01.06 |
반복문 (0) | 2024.01.06 |
딕셔너리 (0) | 2024.01.06 |
리스트 함수 메서드 정리 (0) | 2024.01.06 |