python/numpy
Numpy 에 대해 예제로 알아보자.
설화님
2024. 1. 3. 10:05
Numpy 에 대해 예제로 알아보자.
TensorFlow 기초 - AI를 위한 NumPy [1] Import NumPy Import NumPy import numpy as np # print("NumPy Version : {}".format(np.__version__)) np.__version__ '1.24.3' [2] Python vs NumPy Python L = range(10000) %timeit [i**2 for i in L] 355 µs ± 8.98 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each) NumPy a = np.arange(10000) %timeit a**2 4.04 µs ± 104 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each) [3] np.ndarray 생성 : np.array() 1-D Array a = np.array([0, 1, 2, 3]) print(a) print(a.ndim) print(a.shape) print(len(a)) [0 1 2 3] 1 (4,) 4 2-D Array b = np.array([[0, 1, 2], [3, 4, 5]]) print(b) print(b.ndim) print(b.shape) print(len(b)) [[0 1 2] [3 4 5]] 2 (2, 3) 2 3-D Array c = np.array([[[1], [2]], [[3], [4]]]) print(c) print(c.ndim) print(c.shape) print(len(c)) [[[1] [2]] [[3] [4]]] 3 (2, 2, 1) 2 [4] np.ndarray 생성하는 다른 함수들 np.arange() a = np.arange(10) print(a) b = np.arange(1, 9, 2) print(b) [0 1 2 3 4 5 6 7 8 9] [1 3 5 7] np.ones(), np.zeros(), np.eye() a = np.ones((3, 3)) print(a) b = np.zeros((2, 2)) print(b) c = np.eye(3) print(c) [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] [[0. 0.] [0. 0.]] [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] np.ones_like(), np.zeros_like(), np.empty_like() a = [1,2,3,4] a_like = np.ones_like(a) print(a_like) b = [[1,2,3],[4,5,6]] b_like = np.zeros_like(b) print(b_like) c = [[1,2],[3,4]] c_like = np.empty_like(c) print(c_like) [1 1 1 1] [[0 0 0] [0 0 0]] [[7536757 7471205] [3276851 6553646]] [5] Basic Data Type np.ndarray.dtype a = np.array([1, 2, 3]) print(a.dtype) b = np.array([1., 2., 3.]) print(b.dtype) c = np.array([1+2j, 3+4j, 5+6*1j]) print(c.dtype) d = np.array([True, False, False, True]) print(d.dtype) int32 float64 complex128 bool array 생성 시 dtype 지정 e = np.array([1, 2, 3], dtype=float) print(e.dtype) f = np.array([1., 2., 3.], dtype=int) print(f.dtype) float64 int32 [6] Indexing & Slicing 기본 Indexing 방법 a = np.arange(10) print(a) print(a[0]) print(a[2]) print(a[-1]) [0 1 2 3 4 5 6 7 8 9] 0 2 9 Multidimensional array의 Indexing a = np.eye(3) print(a,'\n') print(a[1, 1],'\n') a[2, 1] = 10 print(a[2, 1],'\n') # third line, second column print(a,'\n') print(a[1],'\n') [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] 1.0 10.0 [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 10. 1.]] [0. 1. 0.] Slicing a = np.arange(10) print(a,'\n') print(a[2:9:3],'\n') # [start:end:step] print(a[:4],'\n') print(a[1:3],'\n') print(a[::2],'\n') print(a[3:],'\n') [0 1 2 3 4 5 6 7 8 9] [2 5 8] [0 1 2 3] [1 2] [0 2 4 6 8] [3 4 5 6 7 8 9] a = np.arange(10) print(a,'\n') a[5:] = 10 print(a,'\n') b = np.arange(5) print(b,'\n') a[5:] = b[::-1] print(a,'\n') [0 1 2 3 4 5 6 7 8 9] [ 0 1 2 3 4 10 10 10 10 10] [0 1 2 3 4] [0 1 2 3 4 4 3 2 1 0] [7] Dimension reduction 연산 np.sum(), np.ndarray.sum() x = np.array([1, 2, 3, 4]) print(np.sum(x)) print(x.sum()) 10 10 특정 축을 기준으로 합계 구하기 x = np.array([[1, 1], [2, 2]]) print(x.sum(axis=0)) print(x.sum(axis=1)) [3 3] [2 4] np.ndarray.min(), np.ndarray.max(), np.ndarray.argmin(), np.ndarray.argmax() x = np.array([1, 3, 2]) print(x.min()) print(x.max()) print(x.argmin()) print(x.argmax()) 1 3 0 1 x = np.array([[9,2,10,6,1],[5,7,3,4,8]]) print(x.argmin(axis=0)) print(x.argmax(axis=1)) [1 0 1 1 0] [2 4] np.all(), np.any() print(np.all([True, True, False])) print(np.any([True, True, False])) False True 통계 관련 x = np.array([1, 2, 3, 1]) y = np.array([[1, 2, 3], [5, 6, 1]]) print(x.mean()) print(np.median(x)) print(np.median(y, axis=-1)) print(x.std()) np.median(x) 1.75 1.5 [2. 5.] 0.82915619758885 1.5 [8] Elementwise operation Scalar value와 Array 사이의 연산 a = np.array([1, 2, 3, 4]) print(a + 1) print(2 ** a) [2 3 4 5] [ 2 4 8 16] Element-wise 연산에서 operand들의 shape mismatche a = np.arange(4) a + np.array([1, 2]) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) Cell In[25], line 2 1 a = np.arange(4) ----> 2 a + np.array([1, 2]) ValueError: operands could not be broadcast together with shapes (4,) (2,) [9] Broadcasting 결과 출력용 함수 def Print_ABC(a, b, c): print("{}, a.shape = {}".format(a, a.shape)) print("{}, b.shape = {}".format(b, b.shape)) print("{}, c.shape = {}".format(c, c.shape)) array + scalar a = np.array([1, 2, 3]) b = 2 c = a + b Print_ABC(a, np.array(b), c) [1 2 3], a.shape = (3,) 2, b.shape = () [3 4 5], c.shape = (3,) array + array ex1 a = np.array([[1, 2, 3],[4, 5, 6]]) b = np.array([1, 2, 3]) c = a + b Print_ABC(a, b, c) [[1 2 3] [4 5 6]], a.shape = (2, 3) [1 2 3], b.shape = (3,) [[2 4 6] [5 7 9]], c.shape = (2, 3) array + array ex2 a = np.array([1, 2, 3, 4]) b = np.array([[1], [2]]) c = a + b Print_ABC(a, b, c) [1 2 3 4], a.shape = (4,) [[1] [2]], b.shape = (2, 1) [[2 3 4 5] [3 4 5 6]], c.shape = (2, 4) array + array ex3 a = np.array([[1], [2], [3], [4]]) b = np.array([1, 2, 3]) c = a + b Print_ABC(a, b, c) [[1] [2] [3] [4]], a.shape = (4, 1) [1 2 3], b.shape = (3,) [[2 3 4] [3 4 5] [4 5 6] [5 6 7]], c.shape = (4, 3) [10] Array Manipulation Flattening : np.ndarry.ravel() a = np.array([[1, 2, 3], [4, 5, 6]]) print(a.ravel()) [1 2 3 4 5 6] Reshaping : np.ndarray.reshape ndarray.reshape may return a view (cf help(np.reshape))), or copy a = np.array([[1, 2, 3], [4, 5, 6]]) b = a.reshape((6, 1)) print(b) c = a.reshape((3, 2)) print(c) print(a.reshape((-1,3))) [[1] [2] [3] [4] [5] [6]] [[1 2] [3 4] [5 6]] [[1 2 3] [4 5 6]] a.reshape((2, -1)) array([[1, 2, 3], [4, 5, 6]])