Pruebas básicas y no muy extensas que comparan el tiempo de ejecución de las cinco respuestas proporcionadas:
def numpyIndexValues(a, b):
na = np.array(a)
nb = np.array(b)
out = list(na[nb])
return out
def mapIndexValues(a, b):
out = map(a.__getitem__, b)
return list(out)
def getIndexValues(a, b):
out = operator.itemgetter(*b)(a)
return out
def pythonLoopOverlap(a, b):
c = [ a[i] for i in b]
return c
multipleListItemValues = lambda searchList, ind: [searchList[i] for i in ind]
utilizando la siguiente entrada:
a = range(0, 10000000)
b = range(500, 500000)
el bucle simple de Python fue el más rápido con la operación lambda en segundo lugar, mapIndexValues y getIndexValues fueron bastante similares con el método numpy significativamente más lento después de convertir las listas en matrices numpy. Si los datos ya están en matrices numpy, el método numpyIndexValues con la conversión numpy.array eliminada es más rápido
numpyIndexValues -> time:1.38940598 (when converted the lists to numpy arrays)
numpyIndexValues -> time:0.0193445 (using numpy array instead of python list as input, and conversion code removed)
mapIndexValues -> time:0.06477512099999999
getIndexValues -> time:0.06391049500000001
multipleListItemValues -> time:0.043773591
pythonLoopOverlap -> time:0.043021754999999995