[python] 사본이있는 Numpy 배열 할당

예를 들어, 우리는이 경우 numpy배열을 A, 그리고 우리는 원하는 numpy배열 B같은 요소를.

다음 (아래 참조) 방법의 차이점은 무엇입니까? 추가 메모리는 언제 할당되고 언제 할당되지 않습니까?

  1. B = A
  2. B[:] = A( B[:]=A[:]? 와 동일 )
  3. numpy.copy(B, A)


답변

세 가지 버전 모두 서로 다른 작업을 수행합니다.

  1. B = A

    이렇게하면 B이미 이름이 지정된 기존 개체에 새 이름이 바인딩 A됩니다. 나중에 동일한 객체를 참조하므로 하나를 제자리에서 수정하면 다른 하나를 통해 변경 사항도 볼 수 있습니다.

  2. B[:] = A( B[:]=A[:]? 와 동일 )

    이렇게하면 값이 A기존 배열로 복사 됩니다 B. 이 작업을 수행하려면 두 배열의 모양이 같아야합니다. B[:] = A[:]같은 일을합니다 (그러나 B = A[:]1과 같은 일을합니다).

  3. numpy.copy(B, A)

    이것은 법적 구문이 아닙니다. 당신은 아마 B = numpy.copy(A). 이것은 2와 거의 동일하지만 배열을 재사용하는 대신 새 배열을 만듭니다 B. 이전 B값에 대한 다른 참조가없는 경우 최종 결과는 2와 동일하지만 복사 중에 일시적으로 더 많은 메모리를 사용합니다.

    아니면 numpy.copyto(B, A)합법적이고 2에 해당하는 을 의미했을 수도 있습니다 .


답변

  1. B=A 참조를 생성
  2. B[:]=A 복사하다
  3. numpy.copy(B,A) 복사하다

마지막 두 개는 추가 메모리가 필요합니다.

깊은 사본을 만들려면 다음을 사용해야합니다. B = copy.deepcopy(A)


답변

이것이 저에게 유일한 해결책입니다.

B=numpy.array(A)


답변