본문 바로가기

cs,코딩,알고리즘/네이버커넥트-인공지능기초다지기(2021)

AI BASIC 코치 강의_3주차(pre)_Numpy데이터 구조

728x90
numpy 내부 구조(view와 copy의 차이점)와 동작원리

일단
n-D Tensor
1-D vector
2-D matrix
->Tensor을 다루는 라이브러리를 Tensorflow

x.data

데이터 값의 첫번째 argument는 array contents를 저장하는 데이터 공간을 가리킨다

=>x는 저 솟자 정보를 어떠한 공간에 저장하고 있다.

x.stride(a,b)

x.stride(a,b) <=a는 row를 바꾸는데 필요한 바이트의 크기(4에서 2로 도달하기 위해서는 24바이트가 필요), b는 column를 옮기는데 필요한 바이트의 크기

=> 단순한 numpy 오브젝트 x는 단순한 matrix 정보를 가지고 있는 것이 아니라, 실제 데이터는 1차원 array로 메모리 공간을 차지하고 있고, 그 메모리 공간을 가리키고 있는 정보( element하나하나가 차지하고 있는 데이터 크기와 타입, 넘파이 오브젝트(x)의 모양, stride정보)를 가지고 있다.

x1=x.reshape((2,6))

x의 모양을 바꾼 x1 매트릭스를 만들었음.

프린트해보면 2행 6열에 맞는 type, shape(모양), stride가 맞게 (맞는 정보) 나온다

각 numpy 오브젝트들(x,x1)이 가리키고 있는 데이터 공간을 출력해보면 같은 공간을 가리키고 있다는 것을 알 수 있다.

서로 다른 numpy 오브젝트가 하나의 데이터를 공유하는 것-> 데이터를 효율적으로 관리할 수 있다.

 

but문제는 두개의 넘파이 오브젝트가 하나의 데이터를 공유하기 때문에 데이터 하나만 바꿔도(두 넘파이 오브젝트는 하나의 데이터를 바라보기 때문에) 두개 다 바뀌어버린다.

 

x1=x.reshape((2,6)).copy()

이를 방지 하기 위해 copy()함수를 써서 새로운 공간을 만들어서 그걸 가리키게 만드는 것

각각의 가리키는 위치 정보와 데이터를 바꿔보면 x만 변한 것을 알 수 있고,

x와 x1이 가리키는 데이터의 위치 정보도 다르다

데이터가 새로 만들어진 공간을 가리키게 만들게 한다

 

추가로 인덱싱에서도 적용 된다.

x에서 첫번째, 세번째 column만 가지고 x2로 reshape하면, x와 같은 곳을 가리킨다

 

마무리

원본 오브젝트와 데이터를 공유하고 있는 view인지

자기만의 데이터를 가지고있는 copy인건지를 구분해야 한다!!

 

<공부할 떄 참고한 링크>

https://numpy.org/

https://www.youtube.com/watch?v=gJSnyo_61YE 

numpyViewipynb.ipynb
0.00MB