Numpy array assignment with copy

PythonArraysNumpy

Python Problem Overview


For example, if we have a numpy array A, and we want a numpy array B with the same elements.

What is the difference between the following (see below) methods? When is additional memory allocated, and when is it not?

  1. B = A
  2. B[:] = A (same as B[:]=A[:]?)
  3. numpy.copy(B, A)

Python Solutions


Solution 1 - Python

All three versions do different things:

  1. B = A

This binds a new name B to the existing object already named A. Afterwards they refer to the same object, so if you modify one in place, you'll see the change through the other one too.

  1. B[:] = A (same as B[:]=A[:]?)

This copies the values from A into an existing array B. The two arrays must have the same shape for this to work. B[:] = A[:] does the same thing (but B = A[:] would do something more like 1).

  1. numpy.copy(B, A)

This is not legal syntax. You probably meant B = numpy.copy(A). This is almost the same as 2, but it creates a new array, rather than reusing the B array. If there were no other references to the previous B value, the end result would be the same as 2, but it will use more memory temporarily during the copy.

Or maybe you meant numpy.copyto(B, A), which is legal, and is equivalent to 2?

Solution 2 - Python

  1. B=A creates a reference
  2. B[:]=A makes a copy
  3. numpy.copy(B,A) makes a copy

the last two need additional memory.

To make a deep copy you need to use B = copy.deepcopy(A)

Solution 3 - Python

This is the only working answer for me:

B=numpy.array(A)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmrgloomView Question on Stackoverflow
Solution 1 - PythonBlckknghtView Answer on Stackoverflow
Solution 2 - PythonMailerdaimonView Answer on Stackoverflow
Solution 3 - PythonWoeitgView Answer on Stackoverflow