Import Numpy


In [ ]:
import numpy as np

Arrary creation


In [ ]:
test_array = np.array([1, 4, 5, 8], float)
print(test_array)
type(test_array[3])

In [ ]:
test_array = np.array([1, 4, 5, 8], np.float32)
print(test_array)
type(test_array[3])

In [ ]:
test_array = np.array([1, 4, 5, "8"], float) # String Type의 데이터를 입력해도
test_array

In [ ]:
type(test_array[3]) # Float Type으로 자동 형변환을 실시

In [ ]:
test_array.dtype # Array(배열) 전체으 데이터 Type을 반환함

Value assignment


In [ ]:
a = np.array([[1, 2, 3], [4.5, 5, 6]], int)
a

In [ ]:
a[0,0]  # Two dimensional array representation #1

In [ ]:
a[0,0] == a[0][0] # Two dimensional array representation #2

In [ ]:
a[0,0] = 12 # Matrix 0,0 에 12 할당
a

In [ ]:
a[0][0] = 5 # Matrix 0,0 에 12 할당
a

Slicing


In [ ]:
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)
a[:,2:] # 전체 Row의 2열 이상

In [ ]:
a[1,1:3] # 1 Row의 1열 ~ 2열

In [ ]:
a[1:3] # 1 Row ~ 2Row의 전체

Function


In [ ]:
np.arange(30) # range: List의 range와 같은 효과, integer로 0부터 29까지 배열추출

In [ ]:
np.arange(30).dtype  # dtype: 배열의 data type을 표시함

In [ ]:
np.arange(30).reshape(5,6) 
# reshape(x,y) : 기존 배열을 row x, column y의 matrix - two dimensional array로 변경 (three도 가능)

In [ ]:
np.zeros(10) # 10 - zero vector 생성

In [ ]:
np.zeros((2,5)) # 2 by 5 - zero matrix 생성

In [ ]:
np.zeros((2,5), np.float32) # 2 by 5 - zero matrix를 float32 type으로 생성

In [ ]:
np.zeros((2,5)).ndim # 2 by 5의 matrix의 차원의 크기 (row 기준)

In [ ]:
np.zeros((2,5)).shape # 2 by 5의 matrix의 전체 크기

In [ ]:
np.ones((5,5),float) # ones((x,y),type): x,y의 matrix를 생성하여 모든 초기값을 1로 설정

In [ ]:
np.empty((5,5),float) # empty((x,y),type):  초기값을이 할당되지 않은 x,y의 matrix를 생성

In [ ]:
np.eye(5,6) # eye((x,y)):  x by y의 matrix를 생성후 대각행렬에 1을 할당

In [ ]:
np.identity(5) # identity((x)):  x by x의 matrix를 생성후 대각행렬에 1을 할당

Numpy operation - Matrix


In [ ]:
test_a = np.array([[1,2,3],[4,5,6]], float)

In [ ]:
test_a + test_a # Matrix + Matrix 연산

In [ ]:
test_a - test_a # Matrix - Matrix 연산

In [ ]:
test_a.transpose() # Matrix trnspose 연산 또는 test_a.T

In [ ]:
test_a * test_a # Matrix내 element들 간 같은 위치에 있는 값들끼리 연산

In [ ]:
test_a.T.dot(test_a) # Matrix 간 곱셈

In [ ]:
print(a)

Numpy operation - Scalar - Matrix


In [ ]:
test_matrix = np.array([[1,2,3],[4,5,6]], float)
scalar = 5

In [ ]:
test_matrix + scalar # Matrix - Scalar 덧셈

In [ ]:
test_matrix - scalar # Matrix - Scalar 뺄셈

In [ ]:
test_matrix * 5 # Matrix - Scalar 곱셈

In [ ]:
test_matrix / 5 # Matrix - Scalar 나눗셈

In [ ]:
test_matrix // 0.2 # Matrix - Scalar 몫

In [ ]:
test_matrix ** 2 # Matrix - Scalar 제곱

Numpy performance #1

  • 마이크로초(μs) : 1/1,000,000초
  • 나노초(ns) : 1/1,000,000,000초

In [ ]:
def sclar_vector_product(scalar, vector):
    result = []
    for value in vector:
        result.append(scalar * value)
    return result 

iternation_max = 10000

vector = list(range(iternation_max))
scalar = 2

In [ ]:
%timeit -n1000 sclar_vector_product(scalar, vector) # for loop을 이용한 성능

In [ ]:
%timeit -n1000 [scalar * value for value in range(iternation_max)] # list comprehension을 이용한 성능

In [ ]:
%timeit -n1000 np.arange(iternation_max) * scalar # numpy를 이용한 성능

In [ ]:
vector = list(range(iternation_max)); 
%timeit vector.append(vector)

In [ ]:
np_vector = np.arange(iternation_max);  
%timeit np.concatenate((np_vector, np_vector) , axis=0)

Numpy comparison operation


In [ ]:
test_a = np.array([1, 3, 0], float)
test_b = np.array([5, 2, 1], float)

In [ ]:
test_a > test_b

In [ ]:
test_a == test_b

In [ ]:
a = np.array([1, 3, 0], float)
np.logical_and(a > 0, a < 3) # and 조건의 condition

In [ ]:
b = np.array([True, False, True], bool)
np.logical_not(b) # NOT 조건의 condition

In [ ]:
b = np.array([True, False, True], bool)
c = np.array([False, True, False], bool)
np.logical_or(b, c) # OR 조건의 condition

In [ ]:
np.where(a > 0, 3, 2) # where(condition, TRUE, FALSE)

In [ ]:
a = np.array([1, np.NaN, np.Inf], float)

In [ ]:
np.isnan(a) # Not a Number 인 것을 찾아라

In [ ]:
np.isfinite(a) # 한정된 값을 찾아라

Numpy boolean index


In [ ]:
test_array = np.array([1, 4, 0, 2, 3, 8, 9, 7], float)
test_array > 3

In [ ]:
test_array[test_array > 3]

In [ ]:
condition = test_array < 3 
test_array[condition]

Numpy fancy index


In [ ]:
a = np.array([2, 4, 6, 8], float)
b = np.array([0, 0, 1, 3, 2, 1], int) # 반드시 integer로 선언
a[b] #bracket index, b 배열의 값을 index로 하여 a의 값들을 추출함

In [ ]:
a.take(b) #take 함수: bracket index와 같은 효과

In [ ]:
a = np.array([[1, 4], [9, 16]], float)
b = np.array([0, 0, 1, 1, 0], int)
c = np.array([0, 1, 1, 1, 1], int)
a[b,c] # b를 row index, c를 column index로 변환하여 표시함

In [ ]:
### Numpy linear algebra

In [ ]:
# Solve the system of equations 3 * x0 + x1 = 9 and x0 + 2 * x1 = 8:

a = np.array([[3,1], [1,2]])
b = np.array([9,8])

In [ ]:
np.linalg.solve(a, b)