filtrado de una matriz numpy 3D de acuerdo con la matriz numpy 2D

Tengo una matriz numpy 2D con la forma (3024, 4032).

Tengo una matriz numpy 3D con la forma (3024, 4032, 3).

La matriz numpy 2D se llena con 0s y 1s.

La matriz numpy 3D se llena con valores entre 0 y 255.

Al observar los valores de la matriz 2D, quiero cambiar los valores de la matriz 3D. Si un valor en la matriz 2D es 0, cambiaré los valores de los 3 píxeles en la matriz 3D a 0 en los últimos ejes. Si un valor en la matriz 2D es 1, no lo cambiaré.

He comprobado esta pregunta, Cómo filtrar una matriz numpy con los valores de otra matriz , pero se aplica a 2 matrices que tienen las mismas dimensiones. En mi caso, las dimensiones son diferentes.

¿Cómo se aplica el filtrado en dos matrices, con el mismo tamaño en 2 dimensiones, pero no el tamaño en la última dimensión?

Ok, responderé esto para resaltar una singularidad con respecto a las dimensiones “faltantes”. Supongamos que a.shape==(5,4,3) y b.shape==(5,4)

Al indexar , las dimensiones existentes se alinean a la izquierda, por lo que la solución de @ Divakar a[b == 0] = 0 funciona.

Cuando se emite , las dimensiones existentes están alineadas a la derecha, por lo que a*b InvaderZim no funciona. Lo que debe hacer es a*b[..., None] que inserta una dimensión de difusión a la derecha

Creo que este es muy simple:

Si a es una matriz 3D (a.shape == (5, 4, 3)) llena de valores, y b es una matriz 2D (b.shape == (5, 4)) rellena con 1 y 0, entonces remodela b y multiplícalos:

 a = a * b.reshape(5, 4, 1) 

Numpy expandirá automáticamente las matrices según sea necesario.