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.

Comparar todas las parejas de numpy.ndarrays y eliminar según una regla en python/numpy.

Tengo una tupla que contiene tres arreglos numpy de alguna longitud que describen pares de puntos.

dat = (is, js, dists)

is y js son índices para algunos puntos y dists es la distancia entre cada par de puntos. Hay una redundancia en dat, así que quiero comparar todos los pares de pares y verificar si

is[n] == js[m] and js[n] == is[m] and dists[n] == dists[m]

es verdadero. Si la afirmación es verdadera, uno de los dos pares debe ser eliminado. Alternativamente, quiero obtener una nueva tupla dat2 sin los pares ‘redundantes’.
¿Cuál es la forma más eficiente de hacer esto? ¿Puedo eliminar objetos de dat mientras itero a través de él?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para comparar eficientemente todos los pares de pares en dat, puedes usar bucles anidados para iterar a través de cada combinación de pares y comparar sus elementos. Si se cumple la condición de redundancia, puedes eliminar uno de los pares de dat utilizando la palabra clave del. Ten en cuenta que eliminar objetos de dat mientras se itera a través de él puede causar un comportamiento inesperado, por lo que se recomienda crear una nueva tupla dat2 sin los pares redundantes en su lugar. Aquí tienes un ejemplo de implementación:

    dat = (is, js, dists)
    n = len(is)
    redundant_pairs = set()
    for i in range(n):
        for j in range(i+1, n):
            if is[i] == js[j] and js[i] == is[j] and dists[i] == dists[j]:
                redundant_pairs.add((i,j))
    dat2 = ([], [], [])
    for i in range(n):
        if i not in [pair[0] for pair in redundant_pairs]:
            dat2[0].append(is[i])
            dat2[1].append(js[i])
            dat2[2].append(dists[i])
    return dat2
    

    En esta implementación, el conjunto redundant_pairs lleva un registro de los pares que deben eliminarse de dat. Luego, se crea una nueva tupla dat2 sin los pares redundantes mediante la iteración a través de la tupla original dat y saltando los índices que corresponden a los pares redundantes.

Comments are closed.