두 개의 배열 hashes
과 table
이있는 경우 각 값에 대해 hashes
으로 배열의 요소 값 오프셋에 요소의 위치를 저장하려고합니다. table
. 다음은 순진한 알고리즘입니다.고성능 구현 방법은 파이썬에서 이러한 유형의 삽입을 수행합니까?
def insert_n(table,hashes):
for x in xrange(len(hashes)):
table[hashes[x]]=x
매우 느립니다. Psyco는 여기에서 약간을 돕지 만, 거의.
numpy.insert(table,numpy.arange(len(hashes)),hashes)
하지만 내 벤치 마크에 따르면,이 여전히 같은 간단한 작업을 매우 느리게 :
NumPy와는 솔루션을 제공합니다. 파이썬에서 사용할 수있는 이것을 수행하는 더 빠른 방법이 있습니까?
몇 가지 추가 예제 코드 :
는table[hashes] = numpy.arange(len(hashes), dtype=numpy.uint32)
당신이와 속도를 비교할 수 있습니다
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
하나의 해시가 여러 개있는 경우 테이블이 마지막 해시를 가리키고 있다는 것을 알고 계십니까? –
예, 충돌로 인해 값의 일부가 손실되어 더 높은 속도와 균형을 이룰 수있는 캐싱 시스템 유형입니다. 어쨌든 새로운 항목은 캐시 히트 가능성이 더 높다고 가정합니다. – user213060
이 질문에 대한 편집 내용은 무엇이며, OP는 대답을 수락하지 않으시겠습니까? – Roman