Numpy Tutorial
- 기본적인 Numpy와 matplotlib 사용 방법 정리
import numpy as np
import time
Numpy 속도 테스트
def sum_trad():
start = time.time()
X = range(10000000)
Y = range(10000000)
Z = []
for i in range(len(X)):
Z.append(X[i] + Y[i])
return time.time() - start
def sum_numpy():
start = time.time()
X = np.arange(10000000)
Y = np.arange(10000000)
Z=X+Y
return time.time() - start
print ('time sum:',sum_trad(),' time sum numpy:',sum_numpy())
배열 생성
단일 값으로 초기화
print(np.full((3, 3), np.inf))
print(np.full((3, 3), 10.1))
arr = np.array([10, 20, 33], float)
print (arr)
print(type(arr))
arr.fill(1)
print (arr)
랜덤 초기화
np.random.permutation(3)
np.random.normal(0,1,5)
np.random.normal(1,2,10)
np.random.random(5)
리스트에서 생성
arr = np.array([2, 6, 5, 9], float)
print (arr)
print (type(arr))
arr = np.array([1, 2, 3], float)
print (arr.tolist())
print (list(arr))
배열 복사
arr = np.array([1, 2, 3], float)
arr1 = arr
arr2 = arr.copy()
arr[0] = 0
print (arr)
print (arr1)
print (arr2)
단위 행렬
print (np.identity(3, dtype=int))
print (np.identity(3))
대각 행렬
np.eye(3, k=1, dtype=float)
영행렬, 1행렬
print (np.zeros(6, dtype=int))
print (np.ones((2,3), dtype=float))
arr = np.array([[13, 32, 31], [64, 25, 76]], float)
print(np.zeros_like(arr))
print(np.ones_like(arr))
배열 쌓기
x = np.array([2, 3, 4])
y = np.array([3, 4, 5])
print(np.stack((x, y)))
print(np.stack((x, y), axis=-1))
2차원 배열 랜덤 초기화
print (np.random.rand(2,3))
배열 관리
배열 읽기/쓰기
arr = np.array([2., 6., 5., 5.])
print(arr[:3])
print(arr[3])
arr[0] = 5.
print(arr)
중복 제거
arr = np.array([2., 6., 5., 5.])
print(np.unique(arr))
정렬/섞기
print(np.sort(arr))
print(np.argsort(arr))
np.random.shuffle(arr)
print(arr)
print(np.array_equal(arr,np.array([1,3,2])))
print(np.array_equal(arr,arr))
배열 슬라이싱
matrix = np.array([[ 4., 5., 6.], [2, 3, 6]], float)
arr = np.array([
[ 4., 5., 6.],
[ 2., 3., 6.]
], float)
print(arr)
print(arr[0:2, 0])
print(arr[1,:])
print(arr[:,2])
print(arr[-1:,-2:])
1차원 배열로 펴기
arr = np.array([[10, 29, 23], [24, 25, 46]], float)
print(arr)
print(arr.flatten())
[[10. 29. 23.]
[24. 25. 46.]]
[10. 29. 23. 24. 25. 46.]
배열의 크기와 데이터 타입
print(arr.shape)
print(arr.dtype)
int_arr = matrix.astype(np.int32)
print(int_arr)
arr = np.array([
[ 4., 5., 6.],
[ 2., 3., 6.]
], float)
print(len(arr))
print(arr.shape)
print(arr.shape[0])
재배열 reshape
arr = np.array(range(8), float)
print(arr)
arr = arr.reshape((4,2))
print(arr)
print(arr.shape)
전치 행렬
arr = np.array(range(6), float).reshape((2, 3))
print(arr)
print(arr.transpose())
matrix = np.arange(15).reshape((3, 5))
print(matrix)
print(matrix .T)
차원 늘리기
arr = np.array([14, 32, 13], float)
print(arr)
print(arr[:,np.newaxis])
print(arr[:,np.newaxis].shape)
print(arr[np.newaxis,:])
print(arr[np.newaxis,:].shape)
배열 결합
arr1 = np.array([[11, 12], [32, 42]], float)
arr2 = np.array([[54, 26], [27, 28]], float)
print(np.concatenate((arr1,arr2)))
print(np.concatenate((arr1,arr2), axis=0))
print(np.concatenate((arr1,arr2), axis=1))
배열 연산
산술연산
arr1 = np.array([1,2,3], float)
arr2 = np.array([1,2,3], float)
print(arr1+arr2)
print(arr1-arr2)
print(arr1 * arr2)
print(arr2 / arr1)
print(arr1 % arr2)
print(arr2**arr1)
브로드캐스팅
arr1 = np.zeros((2,2), float)
arr2 = np.array([1., 2.], float)
print(arr1)
print(arr2)
print(arr1 + arr2)
arr1 = np.zeros((2,2), float)
arr2 = np.array([1., 2.], float)
print( arr1 + arr2[np.newaxis,:])
print(arr1 + arr2[:,np.newaxis])
배열 쿼리
arr1 = np.array([1, 4, 5, 9], float)
arr2 = np.array([0, 1, 1, 3, 1, 1, 1], int)
print(arr1[arr2])
arr1 = np.array([[1, 2], [5, 13]], float)
arr2 = np.array([1, 0, 0, 1], int)
arr3 = np.array([1, 1, 0, 1], int)
arr1[arr2,arr3]
arr1 = np.array([7, 6, 6, 9], float)
arr2 = np.array([1, 0, 1, 3, 3, 1], int)
arr1.take(arr2)
arr1 = np.array([[10, 21], [62, 33]], float)
arr2 = np.array([0, 0, 1], int)
print(arr1.take(arr2, axis=0))
print(arr1.take(arr2, axis=1))
배열 수정 쿼리
arr1 = np.zeros((2,2), float)
arr2 = np.array([1., 2.], float)
print(arr1)
print(arr2)
print(arr1 + arr2)
print(arr1 + arr2[np.newaxis,:])
print(arr1 + arr2[:,np.newaxis])
선형대수 연산
행렬곱
X = np.arange(15).reshape((3, 5))
print(X)
print(X.T)
print(np.dot(X.T, X))
벡터의 외적, 내적, 벡터곱
arr1 = np.array([12, 43, 10], float)
arr2 = np.array([21, 42, 14], float)
print(np.outer(arr1, arr2))
print(np.inner(arr1, arr2))
print(np.cross(arr1, arr2))
행렬식, 역행렬
matrix = np.array([[74, 22, 10], [92, 31, 17], [21, 22, 12]], float)
print(matrix)
print(np.linalg.det(matrix))
inv_matrix = np.linalg.inv(matrix)
print(inv_matrix)
print(np.dot(inv_matrix,matrix))
vals, vecs = np.linalg.eig(matrix)
print(vals)
print(vecs)
통계 함수
arr = np.random.rand(8, 4)
print(arr.mean())
print(np.mean(arr))
print(arr.sum())
Matplotlib Tutorial
import matplotlib.pyplot as plt
기본 그래프
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

스타일 추가
import numpy as np
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'gs', t, t**3, 'b^')
plt.show()

Plotting with keyword strings
data = {'a': np.arange(50),
'c': np.random.randint(0, 50, 50),
'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100
plt.scatter('a', 'b', c='c', s='d', data=data)
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()

Plotting with categorical variables
names = ['group_a', 'group_b', 'group_c']
values = [1, 10, 100]
plt.figure(figsize=(9, 3))
plt.subplot(131)
plt.bar(names, values)
plt.subplot(132)
plt.scatter(names, values)
plt.subplot(133)
plt.plot(names, values)
plt.suptitle('Categorical Plotting')
plt.show()

def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure()
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()

분포
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

Annotation
ax = plt.subplot(111)
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)
plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
plt.ylim(-2, 2)
plt.show()
