[넘파이 기초] 깊은 복사, 얕은 복사 | copy(), view() 이번 포스팅에서는 얕은복사 깊은 복사에 대해 알아보겠습니다. 우선 왜 이러한 복사를 사용하는지 부터 알아볼까요? a = [1, 2, 3, 4, 5] b = a b[0] = 100 print(a) output : 위 코드를 보면 알수 있듯이 int 자료형이 담긴 리스트 a를 b라는 변수값에 담았습니다. 이 말은 a, b 라는 꼬리표가 똑같은 메모리 공간을 사용하게 된다는 말입니다. 그렇기 때문에 우리가 바꾼 값은 b의 첫번째 값인데 최초 값인 a의 첫번째 값도 같이 바뀐 것을 알 수 있죠. 이런식의 작동방법은 메모리 효율성은 뛰어날 수 있으나, 원치않는 문제가 발생되기도 하죠. 이때 사용하는 것이 '복사' 입니다. 말그대로 값은 그대로 복사해서 쓰나 메모리는 따로 쓰겠다라는 말입니다. 복사에는 크게 두가지.. 머신러닝,딥러닝/넘파이,numpy 2021. 6. 23. [넘파이 기초] np.repeat , np.tile (배열 반복 | array 복사) 아직도 for문을 이용해서 열과 행을 복사하시나요? 오늘 이시간에는 넘파이를 통해 손쉽게 열과 행을 복사하는 api를 배워 보도록 하겠습니다. repeat repeat api의 파라미터로는 a, repeats, axis 3개가 있습니다. 이중 a는 우리가 복사할 값, repeats는 몇번을 반복할것인지, 마지막으로 axis 는 복사를 할때 어떤 방향으로 할지를 의미합니다. 코드를 통해 자세히 알아보죠! import numpy as np x = 3 rep = np.repeat(x, 2) print(f"x: {x}") print(f"np.repeat(x, 2): \n{rep}\n") output : 보시는것처럼 스칼라값 3 하나를 repeat을 통해 두번 반복시키니 3이 두개있는 배열이 완성된것을 확인할 수.. 머신러닝,딥러닝/넘파이,numpy 2021. 5. 25. [넘파이 기초] vstack | hstack | concatenate | dstack | stack 마스터 오늘은 array들을 합치는데 사용되는 다양한 api에 대해 알아보겠습니다. vstack vs hstack 1차원 벡터끼리의 결합 import numpy as np a = np.random.randint(0, 10, (4,)) # 1차 벡터 b = np.random.randint(0, 10, (4,)) # 1차 벡터 print(f"a: {a.shape}\n{a}") print(f"a: {b.shape}\n{b}\n") vstack = np.vstack([a, b]) hstack = np.hstack([a, b]) print(f"vstack: {vstack.shape}\n{vstack}") print(f"hstack: {hstack.shape}\n{hstack}\n") output : a, b는 각각 4개.. 머신러닝,딥러닝/넘파이,numpy 2021. 5. 13. [넘파이 기초] bool ndarray로 인덱싱하기(np.nonzero, np.where) 지금까지는 int ndarray를 통해서만 인덱싱을 해보았습니다. 하지만 넘파이에선 int ndarray이외에도 bool ndarray인덱싱도 가능합니다. 자세한건 코드를 통해 확인해보시죠! bool ndarray 기본형 import numpy as np a = np.arange(5) print(f"ndarray: \n{a}") b_indices = np.array([True, False, True, False, True]) # indices는 a shape과 같아야한다. print(f"a[b_indices]: \n{a[b_indices]}") output : 코드를 보시면 감이 오시겠지만 b_indices를 True와 False 로 이루어진 boolean 형태의 array로 만듭니다.. 이때 b_ind.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 28. [넘파이 기초] 반올림, 올림, 버림 이번시간에는 넘파이를 이용해 반올림, 올림, 버림을 어떻게하는지, 그리고 소수점 몇째자리까지 나오게 하고싶을때 어떻게 하는지 알아보도록 하겠습니다. 반올림(np.around/ np.round/ x.round) import numpy as np x = np.random.uniform(-5, 5, (5,)) # 반올림의 다양한 표현 np_around = np.around(x, decimals =2) np_round = np.round(x, decimals=2) x_round = x.round(decimals=2) print(f"x: n {x}\n") print(f"np_around: \n {np_around}") print(f"np_round: \n {np_round}") print(f"x_round: \n.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 27. [넘파이 기초] axis, keepdims 마스터하기 안녕하세요 이번 시간에는 넘파이를 이용할때마다 자주보는 axis, keepdims! 하지만 할때마다 헷갈리는 두녀석을 완벽하게 이해하는 시간을 가져보고자 합니다. "axis = 0" 과 "axis =1" | np.sum() 연산 1. axis = 0일 때 import numpy as np a= np.arange(12).reshape((3,-1)) # 3행으로만들고 나머지는 원소갯수에 따라 알아서 맞추라고 지정. sum_ = a.sum(axis=0) # np.sum(a,axis=0)이랑 같음 print("ndarray: {}\n{}".format(a.shape, a)) print("ndarray.sum(axis=0): {}\n{}".format(sum_.shape,sum_)) output : 2. axis.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 23. [넘파이 기초] int ndarray로 인덱싱 (indexing) 하기 넘파이에서는 기본 파이썬에서 제공하지 않는 강력한 무기가 있습니다. 그건 바로 ndarray를 이용한 인덱싱이 가능하다는 점입니다. ndarray 인덱싱 기본 형태 import numpy as np a = np.arange(10) print(f"ndarray: \n{a}\n") indices = np.array([0, 3, 4]) print(a[indices]) output : indices 변수 안에 np.array를 지정하고 그 array안에 원하는 값의 인덱스를 넣어주는 형태입니다. ' 인덱스들의 배열인 indices를 다시 a[indices] 형태로 넣어주면 최종적으로 인덱스의 해당하는 값들이 출력되는 것이지요. 기본 파이썬 문법에서는 a[0,3,4] 이런식으로 한번에 넣을 수 없는데 넘파이를 사.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 22. [넘파이 기초] broadcasting(브로드 캐스팅) 파헤치기 2편 1편에 이어 2편 시작하겠습니다. [넘파이 기초] broadcasting(브로드 캐스팅) 파헤치기 1편 오늘은 넘파이를 사용할때 필수적으로 사용하는 기능인 broadcasting 에 대해서 알아보도록 하겠습니다. 사실 이 녀석은 잘알면 너무나도 편한 기능이지만 애매 하게 알면.. 혼란을 야기하는 녀석 yeko90.tistory.com 2편에서는 연산하는 두 값이 서로 다른 차원일때 내부적으로 어떻게 연산이 되고 무엇을 주의해야하는지 알아보도록 하겠습니다. 스칼라값과 연산 import numpy as np a = np.array(3) # 스칼라값 = 0차 u = np.arange(5) # 1차 print("shapes: {}/{}".format(a.shape, u.shape)) print("a: ", a).. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 17. [넘파이 기초] broadcasting(브로드 캐스팅) 파헤치기 1편 오늘은 넘파이를 사용할때 필수적으로 사용하는 기능인 broadcasting 에 대해서 알아보도록 하겠습니다. 사실 이 녀석은 잘알면 너무나도 편한 기능이지만 애매 하게 알면.. 혼란을 야기하는 녀석이기도 한데요. 왜냐하면 shape에 따라 작동을 안하기도 하고, 또한 차원에 따라 다른 동작을 하거든요! 각 차원별로 어떻게 내부적으로 연산을 하는지 그림을 통해서 하나하나 뜯어보도록 하겠습니다. 브로드캐스팅이 어떤 기능인지 낯선 분들을 위해 간단한 설명을 하고 시작하도록 하겠습니다. 브로드 캐스팅(broadcasting) 실제 수학에서는 (2,3,4) X 2 = (4,6,8) 이런식으로 가능하죠? 하지만 실제수학에서는 (2,3,4) + (2)에 연산은 가능하지 않습니다. 하지만.. 넘파이에선 가능하죠. im.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 16. [넘파이 기초] flatten 와 ravel의 차이 | 메모리 관리(.copy() vs .view()) 넘파이에서 이 둘의 기능은 사실상 같습니다. 그래서 아마 많은 분들이 둘이 어떤 차이가 있을지 잘 모르실텐데요. 오늘은 이 둘의 기능 및 차이를 알아보고 주의해야 할점을 공부해봅시다. 먼저 둘을 이해하기 위해선 .copy()와 .view() 메소드를 통해 메모리 공유에 대한 개념부터 알아야 합니다. .copy() import numpy as np a = np.arange(5) # array([0, 1, 2, 3, 4]) b = a.copy() b[0] = 100 print(a) print(b) 위와 같이 5개의 원소를 가진 배열을 a 변수에 넣고. 이 값을 복사(copy)에서 다시 b에 넣은 후 b[0] 의 값을 바꾼 경우입니다. a, b 의 값이 어떻게 나올까요? 위와같이 b배열의 값을 변경했으니 b의.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 10. [넘파이 기초] np.resize vs np.reshape 시리즈[2] 데이터 분석을 하다보면 A = ~~~~ B = A.copy() 이런식으로 .copy()라는 메소드가 쓰인 코드를 보신적이 많이 있으실거에요. 이건 왜 쓰는것일까요? copy()를 쓰지않으면 A 에 담겨있는 값을 B라는 변수명에 담는데.. 같은 메모리를 공유를 하게되요. 다시 말하면 같은 공간을 쓰면서 명칭을 두개나 가지고있게 되는거죠.. 그래서 그게 뭐가 문제란 말인가? 쉽게 말하면 같은 공간을 쓰기때문에 B값을 수정하면 원래 값인 A값도 변경되는 문제가 발생됩니다. B값을 수정해도 변경하지 않게하려면 B만을 위한 새로운 공간을 만들어줘야 해요 이때 사용하는게 copy() 라는 메소드입니다. 지금 이해가 당장 되지 않아도 좋아요! 우리가 알아볼 reshape와 resize의 비교를 통해서 차츰차츰 알아가.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 9. [넘파이 기초] np.resize vs np.reshape 시리즈[1] 넘파이를 사용하다보면 자주 만나게 되는 두녀석! 비슷 한듯 다른 두 API np.resize, np.reshape 여러분들은 잘 사용하고 계신가요? 아마 비슷한거같은데 다르기도 한것같고 애매하신분들이 많을 것 같습니다. 오늘은 이 둘의 사용법과 차이를 확인하고 , 잘못 사용하면 어떤 문제가 발생될 수 있는것까지 확인해보는 시간을 가지도록 하겠습니다. np.reshape 먼저 reshape의 사용법입니다. import numpy as np # numpy 를 import 해주고요! a= np.arange(10) # 1~9 까지 숫자 배열을 a 변수에 넣어줍니다. b = np.reshape(a, (2,5)) # 2행 5열 형태로 변경해줘!(re + shape) print("a ndarray :{}\n a sh.. 머신러닝,딥러닝/넘파이,numpy 2021. 4. 9. 이전 1 다음