Étant donné deux matrices hashes
et table
, pour chaque valeur dans hashes
Je veux stocker la position de l'élément au décalage de la valeur de l'élément dans le tableau table
. Voici l'algorithme naïf:Méthode plus performante faire ce type d'insertion de python?
def insert_n(table,hashes):
for x in xrange(len(hashes)):
table[hashes[x]]=x
Ceci est extrêmement lent. Psyco aide certains ici, mais à peine.
Numpy a une solution:
numpy.insert(table,numpy.arange(len(hashes)),hashes)
Mais selon mes repères, cela est encore très lent pour une opération simple. Existe-t-il un moyen plus rapide d'effectuer cela qui peut être utilisé à partir de python?
quelques exemples de code supplémentaires:
import numpy
from time import time
table_size=2**20
hashes_size=2**19
table=numpy.zeros(table_size,dtype=numpy.uint32)
hashes=numpy.fromstring(numpy.random.bytes((hashes_size)*4),
dtype=numpy.uint32)%table_size
t0=time()
numpy.insert(table,numpy.arange(len(hashes)),hashes)
print time()-t0
Vous êtes conscient que s'il y a plusieurs instances d'un hachage, alors la table pointera vers la dernière seulement? –
Oui, c'est pour un type de système de mise en cache où il est parfaitement possible d'échanger la vitesse supérieure pour perdre certaines des valeurs dues à la collision. Les entrées les plus récentes seront supposées être des occurrences de cache plus probables de toute façon. – user213060
Qu'est-ce qui se passe avec les modifications sur cette question, et pourquoi n'acceptez-vous pas les réponses, OP? – Roman