numpy 내부 구조(view와 copy의 차이점)와 동작원리
일단 n-D Tensor 1-D vector 2-D matrix ->Tensor을 다루는 라이브러리를 Tensorflow |
x.data
=>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인건지를 구분해야 한다!!
<공부할 떄 참고한 링크>
'cs,코딩,알고리즘 > 네이버커넥트-인공지능기초다지기(2021)' 카테고리의 다른 글
AI BASIC 코치 강의_3주차(수업)_numpy(1) (0) | 2022.02.05 |
---|---|
AI BASIC 코치 강의_2주차(퀴즈, 팀미션) (0) | 2022.02.03 |
AI BASIC 코치 강의_2주차(퀴즈, 팀미션) (0) | 2022.02.01 |
AI BASIC 코치 강의_2주차 (코칭스터디 라이브강의) (0) | 2022.01.31 |
AI BASIC 코치 강의_2주차(수업)2 (0) | 2022.01.31 |