实现一个系统,在这个系统中,当涉及到繁重的数学提升时,我想做的尽可能少。
我意识到numpy对象的内存化存在问题,因此实现了一个惰性键缓存,以避免整个“过早优化”的争论。
def magic(numpyarg,intarg):
key = str(numpyarg)+str(intarg)
try:
ret = self._cache[key]
return ret
except:
pass
... here be dragons ...
self._cache[key]=value
return value
但由于字符串转换需要相当长的时间...
t=timeit.Timer("str(a)","import numpy;a=numpy.random.rand(10,10)")
t.timeit(number=100000)/100000 = 0.00132s/call
人们有什么建议是“更好的方式”呢?
发布于 2011-03-22 12:22:00
从this answer借来...所以实际上我猜这是一个复制品:
>>> import hashlib
>>> import numpy
>>> a = numpy.random.rand(10, 100)
>>> b = a.view(numpy.uint8)
>>> hashlib.sha1(b).hexdigest()
'15c61fba5c969e5ed12cee619551881be908f11b'
>>> t=timeit.Timer("hashlib.sha1(a.view(numpy.uint8)).hexdigest()",
"import hashlib;import numpy;a=numpy.random.rand(10,10)")
>>> t.timeit(number=10000)/10000
2.5790500640869139e-05
发布于 2011-03-22 14:55:25
发布于 2014-08-05 14:15:11
对于小的numpy数组,这也可能是合适的:
tuple(map(float, a))
如果a
是numpy数组。
https://stackoverflow.com/questions/5386694
复制相似问题