Lab-Numpyinanutshell Copyright 2018 document created by teamlab.gachon@gmail.com Introduction PDF 파일다운로드 오래기다리셨습니다. 드디어 Machin Learning 강의첫번째 Lab Assignment 입니다. 머신러닝강의는사 실 Lab 제작에있어많은고민을했습니다. 처음이야상관없겠지만뒤로갈수록데이터도커지고, 좋은머신 이아닐경우시간도오래걸려서어려움이많을거같습니다. 그러나, 일단은시작하기로했습니다. 첫번째 LAB 은 Numpy 입니다. Numpy 강의는사실그냥보고만있으면, 그렇게어렵지않게이해할수있 습니다. 그러나실제로문제를풀다보면잘못하는경우가굉장히많습니다. 그런사태를미연에방지하기위 해한번도전해보도록합시다. backend.ai 설치 숙제를제출하기앞서, 레블업의 backend.ai 를여러분의파이썬에설치하셔야합니다. 설치하는과정은매우 쉽습니다. 아래처럼터미널또는 cmd 창에서입력을하시면됩니다. pip install backend.ai-client 숙제 파일 (lab_numpy.zip) 다운로드 먼저해야할일은숙제파일을다운로드받는것입니다. Chrome 또는익스플로러와같은웹브라우저주소 창에아래주소를입력합니다. lab_numpy.zip 다운로드된 lab_bla.zip 파일을작업폴더로이동한후압축해제후작업하시길바랍니다. 압축해제하면폴더가 linux_mac 과 windows 로나눠져있습니다. 자신의 OS 에맞는폴더로이동해서코 드를수정해주시기바랍니다. numpy_lab.py 코드 구조
본 Lab 은 Numpy 의실행방법을이해하기위해 8 개의함수를작성해야합니다. 데이터과학을위한파이썬입 문강의를이미수강해본분들은쉽게이해할수있을거라고생각합니다. 각함수별구체적인작성방법은아래와같습니다. n_size_ndarray_creation def n_size_ndarray_creation(n, dtype=np.int): X = None return X 함수목적 n의제곱수로 2 dimentional array를생성하는 ndarray. n: 생성하고자하는 ndarray의 row와 column의개수 dtype: 생성하려는 ndarray의 data type (np.int) row와 column의길이가 n인 two dimentional ndarray로 X[0,0] 은 0으로순차적으로 X[n-1,n- 1] 은 n^2이할당됨 zero_or_one_or_empty_ndarray def zero_or_one_or_empty_ndarray(shape, type=0, dtype=np.int): X = None return X 함수목적 shape이지정된크기의 ndarray를생성, 이때행렬의 element는 type에따라 0, 1 또는 empty 로생성됨. shape: 생성할려는 ndarray의 shape type: 생성되는 element들의값을지정함0은 0, 1은 1, 99는 empty 타입으로생성됨 dtype: 생성하려는 ndarray의 data type (np.int) shape의크기로생성된 ndarray로 type에따라 element의내용이변경됨
>>> zero_or_one_or_empty_ndarray(shape=(2,2), type=1) array([[ 1, 1], [ 1, 1]]) >>> zero_or_one_or_empty_ndarray(shape=(3,3), type=99) # 임의의수생성 array([[1773984320, 487, 1774114944], [ 487, 1947927088, 0], [1947927088, 0, 1701605485]]) change_shape_of_ndarray def change_shape_of_ndarray(x, n_row): return X 함수목적입력된 ndarray X를 n_row의값을 row의개수로지정한 matrix를반환함. 이때입력하는 X의 size는 2의거듭제곱수로전제함. 만약 n_row과 1일때는 matrix가아닌 vector로반환함. X: 입력하는 ndarray n_row: 생성할려는 matrix의 row의개수 row의개수가 n_row인 Matrix 또는 Vector n_row가 1이면 Vector 값으로반환함 >>> X = np.ones((32,32), dtype=np.int) >>> testcode.change_shape_of_ndarray(x, 1) array([1, 1, 1,..., 1, 1, 1]) >>> testcode.change_shape_of_ndarray(x, 512) array([[1, 1], [1, 1], [1, 1],..., [1, 1], [1, 1], [1, 1]])
concat_ndarray def concat_ndarray(x_1, X_2, axis): 함수목적입력된 ndarray X_1과 X_2를 axis로입력된축을기준으로통합하여반환하는함수 X_1과 X_2는 matrix 또는 vector 임, 그러므로 vector 일경우도처리할수가있어야함 axis를기준으로통합할때, 통합이불가능하면 False가반환됨. 단 X_1과 X_2 Matrix, Vector 형태로들어왔다면, Vector를 row가 1개인 Matrix로변환하여통합이가능한지확인할것 X_1: 입력하는 ndarray X_2: 입력하는 ndarray axis: 통합의기준이되는축 0 또는 1임 X_1과 X_2과통합된 matrix 타입의 ndarray >>> a = np.array([[1, 2], [3, 4]]) >>> b = np.array([[5, 6]]) >>> testcode.concat_ndarray(a, b, 0) array([[1, 2], [3, 4], [5, 6]]) >>> testcode.concat_ndarray(a, b, 1) False >>> a = np.array([1, 2]) >>> b = np.array([5, 6, 7]) >>> testcode.concat_ndarray(a, b, 1) array([[1, 2, 5, 6, 7]]) >>> testcode.concat_ndarray(a, b, 0) False concat_ndarray
def normalize_ndarray(x, axis=99, dtype=np.float32): 함수목적입력된 Matrix 또는 Vector를 ndarray X의정규화된값으로변환하여반환함이때정규화변환공식 Z = (X - X의평균 ) / X의표준편차로구성됨. X의평균과표준편차는 axis를기준으로 axis 별로산출됨. Matrix의경우 axis가 0 또는 1일경우, row 또는 column별로 Z value를산출함. axis가 99일경우전체값에대한 normalize 값을구함. X: 입력하는 ndarray, axis: normalize를구하는기준이되는축으로 0, 1 또는 99임, 단 99는 axis 구분없이전체값으로평균과표준편차를구함 dtype: data type으로 np.float32로구정 정규화된 ndarray >>> X = np.arange(12, dtype=np.float32).reshape(6,2) >>> testcode.normalize_ndarray(x) array([[-1.59325504, -1.3035723 ], [-1.01388955, -0.72420681], [-0.43452409, -0.14484136], [ 0.14484136, 0.43452409], [ 0.72420681, 1.01388955], [ 1.3035723, 1.59325504]], dtype=float32) >>> testcode.normalize_ndarray(x, 1) array([[-1., 1.], [-1., 1.], [-1., 1.], [-1., 1.], [-1., 1.], [-1., 1.]], dtype=float32) >>> testcode.normalize_ndarray(x, 0) array([[-1.46385002, -1.46385002], [-0.87831002, -0.87831002], [-0.29277, -0.29277 ], [ 0.29277, 0.29277 ], [ 0.87831002, 0.87831002], [ 1.46385002, 1.46385002]], dtype=float32) save_ndarray
def save_ndarray(x, filename="test.npy"): 함수목적입력된 ndarray X를 argument filename으로저장함 X: 입력하는 ndarray filename: 저장할려는파일이름 >>> X = np.arange(32, dtype=np.float32).reshape(4, -1) >>> filename = "test.npy" >>> testcode.save_ndarray(x, filename) #test.npy 파일이생성됨 boolean_index def boolean_index(x, condition): 함수목적입력된 ndarray X를 String type의 condition 정보를바탕으로해당컨디션에해당하는 ndarray X의 index 번호를반환함단이때, str type의조건인 condition을코드로변환하기위해서는 eval(str("x") + condition) 를사용할수있음 X: 입력하는 ndarray condition: string type의조건 (">3", "== 5", "< 15") 조건에만족하는 ndarray X의 index
>>> X = np.arange(32, dtype=np.float32).reshape(4, -1) >>> testcode.boolean_index(x, "== 3") (array([0]), array([3])) >>> X = np.arange(32, dtype=np.float32) >>> testcode.boolean_index(x, "> 6") (array([ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]),) find_nearest_value def find_nearest_value(x, target_value): 함수목적입력된 vector type의 ndarray X에서 target_value와가장차이가작게나는 element를찾아리턴함이때 X를 list로변경하여처리하는것은실패로간주함. X: 입력하는 vector type의 ndarray target_value : 가장유사한값의기준값이되는값 target_value와가장유사한값 >>> X = np.random.uniform(0, 1, 100) >>> target_value = 0.3 >>> testcode.find_nearest_value(x, target_value) 0.29260674329282488 # 출력되는값은 random 하게바뀜 get_n_largest_values def get_n_largest_values(x, n):
함수목적입력된 vector type의 ndarray X에서큰숫자순서대로 n개의값을반환함. X: vector type의 ndarray n: 반환할려는 element의개수 ndarray X의 element중큰숫자순서대로 n개값이반환됨 ndarray >>> import numpy_lab_solution as t >>> X = np.random.uniform(0, 1, 100) >>> t.get_n_largest_values(x, 3) array([ 0.98935239, 0.98494578, 0.98317255]) >>> t.get_n_largest_values(x, 5) array([ 0.98935239, 0.98494578, 0.98317255, 0.96859596, 0.96485649]) # 출력되는값은 random 하게바뀜 숙제 template 파일 제출하기 ( 윈도우의 경우 ) 1. windows + r 를누르고 cmd 입력후확인을클릭합니다. 2. 작업을수행한폴더로이동합니다. 3. 밑에명령어를 cmd 창에입력합니다. install.bat submit.bat [YOUR_HASH_KEY] 숙제 template 파일 제출하기 (MacorLinux) 1. 터미널을구동합니다. 2. 작업을수행한디렉토리로로이동합니다. 3. 밑에 bash 창을입력합니다. bash install.sh bash submit.sh [YOUR_HASH_KEY]
backend.ai 서비스의업데이트에의해실행전반드시 bash install.sh 또는 install.bat 수 행을바랍니다. NextWork 고생하셨습니다. 조금 Numpy 를성실하게공부하셨던분이라면어렵지않게푸셨을것입니다. 지금잘이해 하는게정말중요합니다. Machine Learning 과목에가장쉽고재밌는숙제였습니다. Humanknowledgebelongstotheworld - from movie 'Password' -