更高性能的方法从python做这种类型的插入?

时间:2009-12-15 14:42:29

标签: python algorithm performance benchmarking

给定两个数组hashestable,对于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

1 个答案:

答案 0 :(得分:2)

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

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

您可能希望将速度与此进行比较:

table[hashes] = xrange(len(hashes))

顺便说一句,numpy.insert与你发布的for循环没有做同样的事情。