Назначение массива Numpy с копией


например, если у нас есть массив numpy A, и мы хотим массив numpy B с теми же самыми элементами.

в чем разница между этими методами? Когда выделяется дополнительная память, а когда нет?

  1. B = A
  2. B[:] = A (то же самое, что B[:]=A[:]?)
  3. numpy.copy(B, A)
3 67

3 ответа:

все три версии делают разные вещи.

  1. это связывает новое имя B к существующему объекту уже с именем A. Впоследствии они ссылаются на один и тот же объект, поэтому, если вы измените один на месте, вы увидите изменение и через другой.

  2. это копирует значения из A в существующий массив B. Для этого два массива должны иметь одинаковую форму. B[:] = A[:] делает то же самое (но B = A[:] сделал бы что-то вроде 1).

  3. это не правовой синтаксис. Ты наверное имел ввиду B = numpy.copy(A). Это почти то же самое, что и 2, но он создает новый массив, а не повторное использование B массив. Если бы не было других ссылок на предыдущий B значение, конечный результат будет таким же, как 2, но он будет использовать больше памяти временно во время копирования.

    Edit: или, может быть, вы имели в виду numpy.copyto(B, A), которое является законным и эквивалентно 2?

  1. B=A создает ссылку
  2. B[:]=A копировать
  3. numpy.copy(B,A) копировать

последние два требуют дополнительной памяти.

чтобы сделать глубокую копию, вам нужно использовать B = copy.deepcopy(A)

Это единственный рабочий ответ для меня:

B=numpy.array(A)