web-dev-qa-db-fra.com

Affectation de tableau Numpy avec copie

Par exemple, si nous avons un numpy array A et que nous voulons un numpy array B avec les mêmes éléments.

Quelle est la différence entre les méthodes suivantes (voir ci-dessous)? Quand de la mémoire supplémentaire est-elle allouée et quand ne l'est-elle pas?

  1. B = A
  2. B[:] = A (Identique à B[:]=A[:]?)
  3. numpy.copy(B, A)
83
mrgloom

Les trois versions font des choses différentes:

  1. B = A

    Cela lie un nouveau nom B à l'objet existant déjà nommé A. Ensuite, ils font référence au même objet. Par conséquent, si vous en modifiez un à la place, vous verrez également le changement se répercuter sur l’autre.

  2. B[:] = A (Identique à B[:]=A[:]?)

    Ceci copie les valeurs de A dans un tableau existant B. Pour que cela fonctionne, les deux tableaux doivent avoir la même forme. B[:] = A[:] Fait la même chose (mais B = A[:] Ferait quelque chose de plus semblable à 1).

  3. numpy.copy(B, A)

    Ce n'est pas une syntaxe légale. Vous avez probablement voulu dire B = numpy.copy(A). C'est presque la même chose que 2, mais cela crée un nouveau tableau, plutôt que de réutiliser le tableau B. S'il n'y avait aucune autre référence à la valeur précédente B, le résultat final serait identique à 2, mais il utilisera plus de mémoire temporairement pendant la copie.

    Ou peut-être que vous vouliez dire numpy.copyto(B, A), qui est légal et équivaut à 2?

101
Blckknght
  1. B=A Crée une référence
  2. B[:]=A Fait une copie
  3. numpy.copy(B,A) fait une copie

les deux derniers ont besoin de mémoire supplémentaire.

Pour faire une copie en profondeur, vous devez utiliser B = copy.deepcopy(A)

27
Mailerdaimon

C'est la seule réponse qui fonctionne pour moi:

B=numpy.array(A)
7
Woeitg