给定两个数组hashestable,对于hashes中的每个值,我想将元素的位置存储在数组table中元素值的偏移处下面是天真的算法:

def insert_n(table,hashes):
    for x in xrange(len(hashes)):
        table[hashes[x]]=x

这是非常缓慢的。心理学在这里帮助了一些人,但几乎没有。
Numpy有一个解决方案:
numpy.insert(table,numpy.arange(len(hashes)),hashes)

但根据我的基准,对于这样一个简单的操作来说,这仍然是非常缓慢的是否有一种可以从python中使用的更快的方法来执行此操作?
一些附加示例代码:
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

最佳答案

这是快速而简单的(假设表和散列是numpy.uint32数组):

table[hashes] = numpy.arange(len(hashes), dtype=numpy.uint32)

您可能需要将速度与此进行比较:
table[hashes] = xrange(len(hashes))

顺便说一句,numpy.insert并不像您发布的for循环那样做。

08-17 18:41