vectores una tutorial transpuesta multiplicar matriz matrices guardar funciones español datos crear array python arrays object copy variable-assignment

tutorial - ¿Cómo hacer una copia de una matriz 2D en Python?



transpuesta de una matriz en python numpy (5)

Esta pregunta ya tiene una respuesta aquí:

X es una matriz 2D. Quiero tener una nueva variable Y que tenga el mismo valor que la matriz X Además, cualquier manipulación adicional con Y no debería influir en el valor de la X.

Me parece tan natural usar y = x . Pero no funciona con arreglos. Si lo hago de esta manera y luego cambia y, la x también cambiará. Descubrí que el problema se puede resolver así: y = x[:]

Pero no funciona con matriz 2D. Por ejemplo:

x = [[1,2],[3,4]] y = x[:] y[0][0]= 1000 print x

devuelve [ [1000, 2], [3, 4] ] . Tampoco ayuda si reemplazo y=x[:] por y = x[:][:] .

¿Alguien sabe cuál es la forma correcta y sencilla de hacerlo?


Creo que np.tile también podría ser útil

>>> a = np.array([0, 1, 2]) >>> np.tile(a, 2) array([0, 1, 2, 0, 1, 2]) >>> np.tile(a, (2, 2)) array([[0, 1, 2, 0, 1, 2], [0, 1, 2, 0, 1, 2]]) >>> np.tile(a, (2, 1, 2)) array([[[0, 1, 2, 0, 1, 2]], [[0, 1, 2, 0, 1, 2]]])


En su caso (ya que usa una lista de listas) debe usar deepcopy , porque ''La diferencia entre la copia superficial y profunda solo es relevante para objetos compuestos (objetos que contienen otros objetos, como listas o instancias de clases): una copia superficial construye un nuevo objeto compuesto y luego (en la medida de lo posible) inserta referencias en él a los objetos encontrados en el original. Una copia profunda construye un nuevo objeto compuesto y luego, recursivamente, inserta copias de los objetos encontrados en el original. ''

Tenga en cuenta que el ejemplo siguiente simplemente intenta mostrarle un ejemplo (no me gastó demasiado) cómo se podría implementar Deepcopy para matrices de 1d y 2d:

arr = [[1,2],[3,4]] deepcopy1d2d = lambda lVals: [x if not isinstance(x, list) else x[:] for x in lVals] dst = deepcopy1d2d(arr) dst[1][1]=150 print dst print arr


Para arreglos 2D es posible usar la función de mapa :

old_array = [[2, 3], [4, 5]] # python2.* new_array = map(list, old_array) # python3.* new_array = list(map(list, old_array))


Prueba esto:

from copy import copy, deepcopy y = deepcopy(x)

No estoy seguro, tal vez copy() es suficiente.


Usar deepcopy () o copiar () es una buena solución. Para una simple caja de matriz 2D

y = [row[:] for row in x]