给定两个数组hashes
和table
,对于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循环那样做。