import numpy as np
numpy 라이브러리를 사용 하기 위해 np라는 이름으로 가져온 것
py_list = [1, 2, 3] # 리스트 생성
# 생성한 리스트 py_list를 np.array()를 통해 ndarray로 변환
arr1 = np.array(pylist)
arr1
~~> array([1, 2, 3])
배열이 생성되었고, 타입을 확인해 보기위해 type(arr1)
을 하게 되면
numpy의 ndarray로 되어 있는 것을 확인해 볼 수 있다.
N
개가 있으면 N 차원 벡터
라고 한다.✨ 리스트와 배열의 차이
리스트는 파이썬에 존재하는 모든 것을 담아낼 수가 있다.
['hello', 10, 123.456, True]
np.arange()
arr = np.arange(10)
arr
~~> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.zeros()
np.zeros(5) # 1차원 배열에 5개의 0을 채운다.
~~> array([0, 0, 0, 0, 0])
np.zeros((3, 4, 5)) # 지정한 차원 수 대로 `0`으로 채워진 텐서 만들기
~~> array([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
np.ones()
np.ones(5)
~~> array([1, 1, 1, 1, 1])
np.ones((3, 4, 5)) # 지정한 차원 수 대로 `1`로 채워진 텐서 만들기
~~> array([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]],
[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]],
[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
np.ones((3, 4, 5)) * 3 # 지정한 차원 수 대로 `3`으로 채워진 텐서 만들기
~~> array([[[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.]],
[[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.]],
[[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.],
[3., 3., 3., 3., 3.]]])
np.full()
np.full((3, 4, 5), 3) # 배열의 모양(shape), 채울 숫자
~~> array([[[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3]],
[[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3]],
[[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3]]])
1
이고, 나머지는 0
인 행렬np.eye()
np.eye(3)
~~> array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
np.eye(3, 4)
~~> array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])
np.eye(5, 5)
~~> array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
np.linspace()
np.linspace(1, 10, 3) # 1부터 10까지 균등하게 3개의 숫자를 만든다.
~~> array([ 1. , 5.5, 10. ])
np.linspace(1, 10, 4)
~~> array([ 1., 4., 7., 10.])
np.linspace(1, 10, 5)
~~> array([ 1. , 3.25, 5.5 , 7.75, 10. ])
가중치
, 편향
)을 초기화 하기 위해서 사용Xavier 초기값
, He 초깃값
, 0.01 표준편차
정규분포
초깃값을 사용할 수 있다.np.random.rand()
0
은 들어가지만 1
은 들어가지 않는 균등분포( 각각의 변수가 나올 확률이 똑같은 분포 )로 부터 랜덤한 샘플을 추출하여 배열을 반환해주는 것np.random.rand(2, 3) # 랜덤값을 채울 차원을 지정
~~> array([[0.85695205, 0.16797547, 0.81858156],
[0.04508979, 0.90062355, 0.12077676]]) # 랜덤하게 지정
np.random.randn()
np.random.randn(10)
~~> array([ 1.62995024, 2.05857788, 1.31321747, -0.16884922, -0.80020921,
0.97661084, -0.56047694, 0.87656974, 1.28965992, 2.80601732]) # 랜덤하게 지정
np.random.uniform()
np.random.uniform(1.0, 3.0, size=(4, 5)) # 1.0 ~ 3.0까지의 균등분포를 4행 5열 사이즈로 랜덤 값 생성
~~> array([[1.5761483 , 1.88345273, 2.42165166, 1.35092032, 2.34578535],
[2.64140406, 2.8769344 , 2.50453956, 2.11145305, 2.80381345],
[2.54661575, 1.16479336, 2.67801323, 1.89666798, 1.04070194],
[2.35784727, 1.89450568, 1.02591016, 1.58074891, 2.41453005]]) # 랜덤하게 지정
np.random.choice()
mini-batch
를 만들 때 사용한다.np.random.choice(100, size=(3, 4)) # 기본은 중복을 허용하면서 추출
~~> array([[91, 35, 81, 88],
[12, 68, 88, 74],
[70, 61, 14, 66]])
숫자 내에서 랜덤하게 추출할 수도 있지만, 배열 내에서 랜덤하게 추출할 수도 있다.
arr = np.arange(1, 6) # arr = [1, 2, 3, 4, 5]
np.random.choice(arr, size=(2, 2))
~~> array([[1, 3],
[5, 4]]) # arr에서 랜덤으로 숫자를 가져와 추출
np.random.randint()
arr1 = np.random.randint(1, 100, size=(5, )) # 1차원 배열의 원소에 5개의 1 ~ 100 사이 랜덤 값을 채운다
arr1
~~> array([48, 47, 29, 53, 44])
arr2 = np.random.randint(1, 100, size=(5, 1)) # 2차원 배열에 랜덤 정수 채우기
arr2
~~> array([[62],
[38],
[18],
[16],
[41]])
✨arr1과 arr2는 같은 배열이 아니다.
✨arr1과 arr2는 같은 벡터이다.
arr1
: numpy에서는 행 벡터의 모양을 하고 있지만, 실제로는 열 벡터이다.arr2
: 열의 수가 1개인 열 벡터의 모양을 하고 있다.💡
모든 러신러닝 라이브러리( sklearn, tensorflow, pytoch, caffe 등 )에서는 기본적인 데이터 취급을 열 벡터로 하기 때문에 2차원 배열 이상부터 취급이 가능하다.
💡
2 차원 데이터 이상부터 전치행렬 변환이 가능하다.