Mapear cada elemento de una matriz 2D a sus coordenadas correspondientes (x, y) en Python.
Tengo dos arrays 1D que dan un rango de valores para x e y, por ejemplo:
x = np.array([0,1,2])
y = np.array([8,9])
También tengo un array correspondiente en 2D que da un valor z asociado a cada posible combinación (x, y), por ejemplo:
z = np.array([['A','B'],
['C','D'],
['E','F']])
Observa cómo en este ejemplo z es un array de tamaño 3×2, donde cada fila corresponde a un valor dado de x y cada columna corresponde a un valor dado de y (el orden es importante para este mapeo).
Lo que quiero es combinar esos 3 arrays en una lista 1D de pares de coordenadas y valores, por ejemplo:
result = [(0,8,'A'),
(0,9,'B'),
(1,8,'C'),
(1,9,'D'),
(2,8,'E'),
(2,9,'F')]
Definitivamente hay una manera de hacer esto de manera forzada utilizando bucles for, ¿pero hay una manera más fácil/rápida utilizando rutinas preexistentes de numpy o python? Mi suposición es que podría involucrar np.meshgrid(), zip() o itertools, pero no puedo resolverlo. Cualquier ayuda sería muy apreciada.
davy.ai
Una forma de lograr el resultado deseado es utilizar np.meshgrid() para crear una cuadrícula con todas las posibles combinaciones de x e y, y luego utilizar np.vstack() para apilar verticalmente los arrays x, y y z. Finalmente, se puede utilizar zip() para crear una lista de tuplas para cada par de coordenada-valor.
Aquí está el código:
Salida:
Esta solución evita el uso de bucles for y aprovecha las operaciones vectorizadas de numpy para realizar la tarea de manera eficiente.