es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtrado de matriz multidimensional en Python numpy por los valores de otra matriz.

Tengo una lista que consiste en 7 columnas y más de 43 mil filas, que representan x, y, z, R, G, B, Intensidad de una nube de puntos de una encuesta LIDAR. Me gustaría filtrar la nube por color, habiendo aislado manualmente una parte. Me gustaría eliminar todas las filas que no tengan la combinación RGB igual a una de las que están presentes en el filtro.
Por ejemplo:

Data = [[4,8,12,179,118,74,I1], [5,10,45,142,186,98,I2], [7,14,21,185,193,112,I3], [8,16,24,115,140,43,I3]]

Y tengo un filtro en las columnas 4, 5 y 6 (RGB), de la siguiente manera:

Filter = [[179,118,74],[185,193,112]]

Como resultado, me gustaría obtener una nueva lista que contenga solo los elementos que cumplen con los requisitos (en este caso, serían la primera y tercera fila).
Me gustaría obtener una nueva lista de este tipo:

newlist = [[4,8,12,179,118,74,I1], [7,14,21,185,193,112,I3]]

No tengo experiencia en Python, así que no sabría por dónde empezar.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para filtrar el array de nube de puntos por color, podemos usar arrays de numpy y aplicar una máscara para eliminar todas las filas que no coincidan con los valores RGB presentes en el filtro.

    Aquí hay un código que debería funcionar para tu problema:

    import numpy as np
    
    # Define tus datos como un array de numpy
    data = np.array([[4,8,12,179,118,74,I1], [5,10,45,142,186,98,I2], [7,14,21,185,193,112,I3], [8,16,24,115,140,43,I3]])
    
    # Define tu filtro como un array de numpy
    filter = np.array([[179,118,74],[185,193,112]])
    
    # Aplica el filtro a los datos
    mask = np.any(np.all(data[:,3:6] == filter, axis=2), axis=1)
    newlist = data[mask].tolist()
    
    # Imprime la lista filtrada
    print(newlist)
    

    Lo que este código hace es primero definir los arrays de datos y filtro como arrays de numpy, para que podamos usar funciones de numpy para aplicar el filtro.

    Luego, creamos una máscara comparando los valores RGB en cada fila del array de datos con los valores del filtro, usando la función np.all para verificar si los tres valores RGB coinciden para cada valor del filtro. La máscara resultante es un array booleano de la misma longitud que el array de datos.

    Finalmente, usamos esa máscara para seleccionar las filas del array de datos que coinciden con el filtro, y convertimos el array de numpy resultante nuevamente en una lista estándar usando la función tolist().

    Espero que esto te ayude. Hazme saber si tienes alguna pregunta adicional.

Comments are closed.