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?
B = A
B[:] = A
(Identique à B[:]=A[:]
?)numpy.copy(B, A)
Les trois versions font des choses différentes:
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.
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).
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?
B=A
Crée une référenceB[:]=A
Fait une copienumpy.copy(B,A)
fait une copieles deux derniers ont besoin de mémoire supplémentaire.
Pour faire une copie en profondeur, vous devez utiliser B = copy.deepcopy(A)
C'est la seule réponse qui fonctionne pour moi:
B=numpy.array(A)