vectores unir una recorrer que posiciones matriz matrices guardar datos crear bidimensional arreglo array python arrays multidimensional-array numpy iteration

una - unir dos matrices en python



Iterando a través de una matriz multidimensional en Python (6)

He creado una matriz multidimensional en Python como esta:

self.cells = np.empty((r,c),dtype=np.object)

Ahora quiero iterar a través de todos los elementos de mi matriz bidimensional, y no me importa el orden. ¿Cómo logro esto?


Está claro que estás usando numpy. Con numpy puedes hacer:

for cell in self.cells.flat: do_somethin(cell)


Nadie tiene una respuesta que funcione de forma arbitraria en muchas dimensiones sin numpy, así que pondré aquí una solución recursiva que he usado

def iterThrough(lists): if not hasattr(lists[0], ''__iter__''): for val in lists: yield val else: for l in lists: for val in iterThrough(l): yield val for val in iterThrough( [[[111,112,113],[121,122,123],[131,132,133]], [[211,212,213],[221,222,223],[231,232,233]], [[311,312,313],[321,322,323],[331,332,333]]]): print(val) # 111 # 112 # 113 # 121 # ..

Esto no tiene una muy buena comprobación de errores pero funciona para mí


Qué tal esto:

import itertools for cell in itertools.chain(*self.cells): cell.drawCell(surface, posx, posy)


Si necesita cambiar los valores de las celdas individuales, entonces ndenumerate (en numpy) es su amigo. ¡Incluso si no lo haces, probablemente todavía lo sea!

for index,value in ndenumerate( self.cells ): do_something( value ) self.cells[index] = new_value


Solo itere sobre una dimensión, luego la otra.

for row in self.cells: for cell in row: do_something(cell)

Por supuesto, con solo dos dimensiones, puede comprimir esto en un solo ciclo utilizando una lista de comprensión o expresión del generador, pero eso no es muy escalable o legible:

for cell in (cell for row in self.cells for cell in row): do_something(cell)

Si necesita escalar esto a múltiples dimensiones y realmente desea una lista plana, puede escribir una función flatten .


puede obtener el índice de cada elemento así como también el elemento usando el comando enumerar:

for (i,row) in enumerate(cells): for (j,value) in enumerate(row): print i,j,value

i , j contiene el índice de fila y columna del elemento y el value es el elemento mismo.