오늘 할 일: 갈고 닦기

Numpy는 과학 계산을 위해 반드시 필요한 패키지입니다. 다차원 배열을 위한 기능과 선형 대수 연산, 수학 함수, 유사 난수 생성기를 포함합니다. 핵심 기능은 다차원 배열인 ndarray 클래스로, 이 배열의 모든 원소는 동일한 데이터 타입이어야 합니다.

 

1. 배열 만들기

numpy 배열은 리스트로 구현합니다.

import numpy as np

a = np.array([1, 2, 3])
b = np.array([[1.5, 2, 3], [4, 5, 6]])
print(a)
print(b)
[1 2 3]
[[1.5 2.  3. ]
 [4.  5.  6. ]]

 

np.zeros([행의 수, 열의 수])

np.zeros([3, 4])       # 영행렬 생성
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

 

np.ones([행의 수, 열의 수])

np.ones([3, 4])        # 원소가 1인 행렬 생성
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

 

np.arange()

np.arange(4)           # 0 <= x < 4인 정수 x
np.arange(5, 20, 3)    # 5이상 20미만의 3씩 증가하는 정수
array([0, 1, 2, 3])
array([ 5,  8, 11, 14, 17])

 

np.linspace(from, to, num)

np.linspace(0, 2, 9)   # 0 이상 2 이하를 9개의 수로 균등하게 분할
array([0.  , 0.25, 0.5 , 0.75, 1.  , 1.25, 1.5 , 1.75, 2.  ])

 

np.full([행의 수, 열의 수], value)

np.full([2, 2], 7)
array([[7, 7],
       [7, 7]])

 

np.eye(차원의 수) : 항등행렬 생성

np.eye(2)
array([[1., 0.],
       [0., 1.]])

 

2. 배열 탐색

ndarray.shape

b.shape  # 배열의 차원
(2, 3)

 

len(ndarray)

len(b)   # 배열의 길이
2

 

ndarray.ndim

b.ndim   # 배열 차원의 수
2

 

ndarray.size

b.size   # 배열 내 원소의 수
6

 

ndarray.dtype

b.dtype  # 원소의 데이터 타입
dtype('float64')

 

ndarray.astype(another type)

b.astype(int)  # 배열의 타입을 다른 종류로 변환
array([[1, 2, 3],
       [4, 5, 6]])

 

3. 배열 연산

더하기

x = np.array([[1, 2], [3, 4]], dtype=np.float64)
y = np.array([[5, 6], [7, 8]], dtype=np.float64)
x + y
np.add(x, y)
array([[ 6.,  8.],
       [10., 12.]])

 

빼기

x - y
np.subtract(x, y)
array([[-4., -4.],
       [-4., -4.]])

 

곱하기

동일한 위치의 원소끼리 곱하는 연산으로, 행렬곱과 다릅니다. 

x * y
np.multiply(x, y)
array([[ 5., 12.],
       [21., 32.]])

 

나누기

x / y
np.divide(x, y)
array([[0.2       , 0.33333333],
       [0.42857143, 0.5       ]])

 

np.sqrt(ndarray)

np.sqrt(x)
array([[1.        , 1.41421356],
       [1.73205081, 2.        ]])

 

np.log(ndarray)

np.log(x)
array([[0.        , 0.69314718],
       [1.09861229, 1.38629436]])

 

np.exp(ndarray)

np.exp(x)
array([[ 2.71828183,  7.3890561 ],
       [20.08553692, 54.59815003]])

 

np.dot(x, y) : 행렬곱

np.dot(x, y) # 행렬곱
x.dot(y)     # 위와 동일
array([[19., 22.],
       [43., 50.]])

 

두 행렬의 원소 비교 : ==

z = np.array([[1, 3], [3, 6]], dtype=np.float64)
x == z
array([[ True, False],
       [ True, False]])

 

np.array_equal(ndarray, ndarray) : 두 행렬이 동일한지 비교하기

np.array_equal(x, z)
False

 

집계 함수

ndarray.sum()

x.sum()
x.sum(axis=0)   # 각 열의 합계
x.sum(axis=1)   # 각 행의 합계
10.0
array([4., 6.])
array([3., 7.])

 

ndarray.min()

x.min()
x.min(axis=0)   # 각 열에서 최솟값
x.min(axis=1)   # 각 행에서 최솟값
1.0
array([1., 2.])
array([1., 3.])

 

ndarray.max()

x.max()
x.max(axis=0)   # 각 열에서 최댓값
x.max(axis=1)   # 각 행에서 최댓값
4.0
array([3., 4.])
array([2., 4.])

 

ndarray.cumsum() : 누적합 구하기

x.cumsum()
x.cumsum(axis=0)
x.cumsum(axis=1)
array([ 1.,  3.,  6., 10.])
array([[1., 2.],
       [4., 6.]])
array([[1., 3.],
       [3., 7.]])

 

np.mean(ndarray), np.median(ndarray), np.var(ndarray), np.std(ndarray)

: 평균, 중위수(중앙값), 분산, 표준편차

np.mean(x)
np.median(x)
np.var(x)
np.std(x)
2.5
2.5
1.25
1.118033988749895

 

4. 부분 집합, 슬라이싱, 인덱싱

subsetting

a
b
array([1, 2, 3])
array([[1.5, 2. , 3. ],
       [4. , 5. , 6. ]])
a[2]
b[1, 2]  # b[1][2]과 동일
3
6.0

 

slicing

a[0:2]     # 0, 1번째 원소
b[0:2, 1]  # 0, 1번째 행과 1열에 해당하는 원소
b[:1]      # 0번째 행, b[0:1, :]과 동일
b[:, :2]   # 0, 1번째 열
array([1, 2])
array([2., 5.])
array([[1.5, 2. , 3. ]])
array([[1.5, 2. ],
       [4. , 5. ]])

 

boolean indexing

a[a < 3]
array([1, 2])

 

5. 행렬 조작하기

np.transpose(ndarray), ndarray.T : 전치행렬

np.transpose(b)   # 전치행렬
b.T
array([[1.5, 4. ],
       [2. , 5. ],
       [3. , 6. ]])

 

ndarray.ravel() : 원소를 1차원 배열로 나열

b.ravel()        # flatten the array
array([1.5, 2. , 3. , 4. , 5. , 6. ])

 

ndarray.reshape(행의 수, 열의 수) : 행렬의 차원을 변환

b.reshape(3, 2)
array([[1.5, 2. ],
       [3. , 4. ],
       [5. , 6. ]])

 

np.vstack((ndarray, ndarray)) = np.r_[ndarray, ndarray] : 행결합

np.vstack((x, y))
np.r_[x, y]
array([[1., 2.],
       [3., 4.],
       [5., 6.],
       [7., 8.]])

 

np.hstack((ndarray, ndarray)) = np.c_[ndarray, ndarray] : 열결합

np.hstack((x, y))
np.c_[x, y]
array([[1., 2., 5., 6.],
       [3., 4., 7., 8.]])

 

참고자료

http://cs231n.github.io/python-numpy-tutorial/#numpy

 

Python Numpy Tutorial

This tutorial was contributed by Justin Johnson. We will use the Python programming language for all assignments in this course. Python is a great general-purpose programming language on its own, but with the help of a few popular libraries (numpy, scipy,

cs231n.github.io

https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf

불러오는 중입니다...