实施一个系统,当涉及到繁重的数学提升时,我想尽可能少地做.
我知道存在与numpy对象进行memoisation的问题,因此实现了一个惰性密钥缓存以避免整个"过早优化"参数.
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
Run Code Online (Sandbox Code Playgroud)
但由于字符串转换需要很长时间......
t=timeit.Timer("str(a)","import numpy;a=numpy.random.rand(10,10)")
t.timeit(number=100000)/100000 = 0.00132s/call
Run Code Online (Sandbox Code Playgroud)
人们认为做"更好的方式"是什么意思?
我正在进行一些计算密集的计算,处理numpy矩阵和ndarray,并且从一些挖掘中,有大约十二种不实现memoization的方法,通常充满了冲突,ndarrays是可变对象的问题.
有没有人遇到过一个可以处理numpy对象的相当普遍的memoisation装饰器?
在python / numpy中,我有一个名为的10,000x10,000数组random_matrix。我使用MD5计算哈希值str(random_matrix)和random_matrix本身。在字符串版本上花费0.00754404067993秒,在numpy数组版本上花费1.6968960762。当我将其放入20,000x20,000数组时,在字符串版本上花费0.0778470039368,在numpy数组版本上花费60.641119957秒。为什么是这样?numpy数组比字符串占用更多的内存吗?另外,如果我想用这些矩阵标识文件名,那么在计算散列值之前将其转换为字符串是一个好主意,还是有一些缺点?