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?
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 dedat
utilizando la palabra clavedel
. Ten en cuenta que eliminar objetos dedat
mientras se itera a través de él puede causar un comportamiento inesperado, por lo que se recomienda crear una nueva tupladat2
sin los pares redundantes en su lugar. Aquí tienes un ejemplo de implementación:En esta implementación, el conjunto
redundant_pairs
lleva un registro de los pares que deben eliminarse dedat
. Luego, se crea una nueva tupladat2
sin los pares redundantes mediante la iteración a través de la tupla originaldat
y saltando los índices que corresponden a los pares redundantes.