본문 바로가기
Engineering/Python

Numpy에서 배열(ndarray) 복사 3가지

by Humaneer 2014. 9. 12.

Numpy에서 ndarray를 복사하는 경우의 수는 3가지가 있음.


1. No Copy at All




아래와 같이 그냥 대입할 경우에 복사는 일어나지 않음.

ndarray의 데이터와 속성을 모두 공유함. 그저 이름만 다른 변수가 하나 생기는 것.

a = arange(15).reshape(3,5)

b = a


이렇게 복사했을경우

b.shape = (1,15)

이렇게 하면 당연히 a의 dimension도 바뀜.

b[0] = 0

이렇게 하면 당연히 a[0]도 바뀜.


b is a의 리턴은 당연히 True



또한 함수의 인자로 ndarray를 넣을 경우, call by value가 아니라 call by reference로 처리됨.




2. View Copy (or Shallow Copy)



데이터는 공유하지만 행열의 dimension 등의 속성은 공유하지 않음.


a = arange(10).reshape(3,5)

b = a.view()

이렇게 복사했을 경우


b.shape = (1,15)

이렇게 하더라도 a의 dimension은 바뀌지 않음

b[0] = 0

이렇게 하면 a[0]이 바뀜.


b is a의 리턴은 False

b.base is a의 리턴은 True



3. Deep Copy (or Shallow Copy)



전혀 다른 메모리 공간에 값만 같은 배열을 복사함.


a = arange(10).reshape(3,5)

b = a.copy()


a와 b는 완전히 독립적임.