Estoy tratando de usar y acelerar la indexación elegante para "unir" dos matrices y sumar en uno de los ejes de los resultados.¿Rápido (e) nimio lujo de indexación y reducción?
Algo como esto:
$ ipython
In [1]: import numpy as np
In [2]: ne, ds = 12, 6
In [3]: i = np.random.randn(ne, ds).astype('float32')
In [4]: t = np.random.randint(0, ds, size=(1e5, ne)).astype('uint8')
In [5]: %timeit i[np.arange(ne), t].sum(-1)
10 loops, best of 3: 44 ms per loop
¿Existe una manera sencilla de acelerar la declaración en In [5]
? ¿Debería ir con OpenMP y algo así como scipy.weave
o ? prange
?
Otra pregunta relacionada es ¿cómo usaría 'pandas' para hacer lo mismo? – npinto
Numpy lo hace a la velocidad C, por lo que probablemente no podrá acelerarlo mucho con el tejido. – reptilicus