首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >散列Numpy对象进行缓存的快速方法

散列Numpy对象进行缓存的快速方法
EN

Stack Overflow用户
提问于 2011-03-22 12:09:55
回答 3查看 12.2K关注 0票数 22

实现一个系统,在这个系统中,当涉及到繁重的数学提升时,我想做的尽可能少。

我意识到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

人们有什么建议是“更好的方式”呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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
票数 26
EN

Stack Overflow用户

发布于 2011-03-22 14:55:25

为此,有一个名为joblib的包。从this问题中找到。

from joblib import Memory
location = './cachedir'
memory = Memory(location)

# Create caching version of magic
magic_cached = memory.cache(magic)
result = magic_cached(...)

# Or (for one-time use)
result = memory.eval(magic, ...)
票数 6
EN

Stack Overflow用户

发布于 2014-08-05 14:15:11

对于小的numpy数组,这也可能是合适的:

tuple(map(float, a))

如果a是numpy数组。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5386694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档