给定两个数组hashes
和table
,对于hashes
中的每个值,我想将元素的位置存储在数组table
中元素的值的偏移处。这是天真的算法:
def insert_n(table,hashes):
for x in xrange(len(hashes)):
table[hashes[x]]=x
这非常慢。 Psyco在这里帮助了一些,但几乎没有。
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
答案 0 :(得分:2)
这是快速而简单的(假设表和散列是numpy.uint32数组):
table[hashes] = numpy.arange(len(hashes), dtype=numpy.uint32)
您可能希望将速度与此进行比较:
table[hashes] = xrange(len(hashes))
顺便说一句,numpy.insert
与你发布的for循环没有做同样的事情。