¿Hay alguna manera rápida de obtener elementos únicos en numpy? Tengo un código similar a esto (la última línea)Eliminación rápida de duplicados en numpy y python
tab = numpy.arange(100000000)
indices1 = numpy.random.permutation(10000)
indices2 = indices1.copy()
indices3 = indices1.copy()
indices4 = indices1.copy()
result = numpy.unique(numpy.array([tab[indices1], tab[indices2], tab[indices3], tab[indices4]]))
Esto es sólo un ejemplo y en mi situación indices1, indices2,...,indices4
contiene un conjunto diferente de índices y tienen diferentes tamaños. La última línea se ejecuta muchas veces y me di cuenta de que en realidad es el cuello de botella en mi código ({numpy.core.multiarray.arange}
precesivo). Además, el orden no es importante y el elemento en la matriz de índices es del tipo int32
. Estaba pensando en usar hashtable con valor de elemento como clave y lo intenté:
seq = itertools.chain(tab[indices1].flatten(), tab[indices2].flatten(), tab[indices3].flatten(), tab[indices4].flatten())
myset = {}
map(myset.__setitem__, seq, [])
result = numpy.array(myset.keys())
pero era aún peor.
¿Hay alguna manera de acelerar esto? Supongo que la penalización de rendimiento proviene de una "indexación elegante" que copia la matriz, pero necesito el elemento resultante solo para leer (no modifico nada).
¿Qué tan rápido sería convertirlo a un conjunto, y luego volver a una matriz numpy ser? – FakeRainBrigand
He comprobado este método y en realidad fue un 20% peor – pzo