예를 들어, 우리는이 경우 numpy
배열을 A
, 그리고 우리는 원하는 numpy
배열 B
같은 요소를.
다음 (아래 참조) 방법의 차이점은 무엇입니까? 추가 메모리는 언제 할당되고 언제 할당되지 않습니까?
B = A
B[:] = A
(B[:]=A[:]
? 와 동일 )numpy.copy(B, A)
답변
세 가지 버전 모두 서로 다른 작업을 수행합니다.
-
B = A
이렇게하면
B
이미 이름이 지정된 기존 개체에 새 이름이 바인딩A
됩니다. 나중에 동일한 객체를 참조하므로 하나를 제자리에서 수정하면 다른 하나를 통해 변경 사항도 볼 수 있습니다. -
B[:] = A
(B[:]=A[:]
? 와 동일 )이렇게하면 값이
A
기존 배열로 복사 됩니다B
. 이 작업을 수행하려면 두 배열의 모양이 같아야합니다.B[:] = A[:]
같은 일을합니다 (그러나B = A[:]
1과 같은 일을합니다). -
numpy.copy(B, A)
이것은 법적 구문이 아닙니다. 당신은 아마
B = numpy.copy(A)
. 이것은 2와 거의 동일하지만 배열을 재사용하는 대신 새 배열을 만듭니다B
. 이전B
값에 대한 다른 참조가없는 경우 최종 결과는 2와 동일하지만 복사 중에 일시적으로 더 많은 메모리를 사용합니다.아니면
numpy.copyto(B, A)
합법적이고 2에 해당하는 을 의미했을 수도 있습니다 .
답변
B=A
참조를 생성B[:]=A
복사하다numpy.copy(B,A)
복사하다
마지막 두 개는 추가 메모리가 필요합니다.
깊은 사본을 만들려면 다음을 사용해야합니다. B = copy.deepcopy(A)
답변
이것이 저에게 유일한 해결책입니다.
B=numpy.array(A)