python - tablas - pandas dataframe
Numeración de asignación de matriz con copia (3)
Por ejemplo, si tenemos una matriz numpy A
, y queremos una matriz numpy B
con los mismos elementos.
¿Cuál es la diferencia entre estos métodos? ¿Cuándo se asigna memoria adicional y cuándo no?
-
B = A
-
B[:] = A
(igual queB[:]=A[:]
?) -
numpy.copy(B, A)
-
B=A
crea una referencia -
B[:]=A
hace una copia -
numpy.copy(B,A)
hace una copia
los dos últimos necesitan memoria adicional.
Para hacer una copia profunda necesita usar B = copy.deepcopy(A)
Esta es la única respuesta que funciona para mí:
B=numpy.array(A)
Las tres versiones hacen cosas diferentes.
Esto une un nuevo nombre
B
al objeto existente que ya se llamaA
Luego se refieren al mismo objeto, por lo que si modifica uno en su lugar, verá el cambio a través del otro también.Esto copia los valores de
A
en una matriz existenteB
Las dos matrices deben tener la misma forma para que esto funcione.B[:] = A[:]
hace lo mismo (peroB = A[:]
haría algo más como 1).Esto no es sintaxis legal. Probablemente quiso decir
B = numpy.copy(A)
. Esto es casi lo mismo que 2, pero crea una nueva matriz, en lugar de reutilizar la matrizB
Si no hubiera otras referencias al valorB
anterior, el resultado final sería el mismo que 2, pero utilizará más memoria temporalmente durante la copia.Editar: ¿o quizás te
numpy.copyto(B, A)
, que es legal y equivale a 2?