Python 记忆NumPy矢量化函数
我有一个函数is_prime(n),如果n是prime,则返回True,否则返回False。在NumPy中,我正在循环,检查数组是否包含素数,并且数组的开头在每次迭代中都是相同的,因此我想记住is_prime(n)函数,以避免大量不必要的计算 因为我有一个数组,所以我想将is_prime(n)矢量化,这样我就可以将它逐元素应用到数组中,以NumPy样式。我使用NumPy教程(稍后显示)中的一行代码完成此操作 我还使用了我在网上找到的备忘录模板:Python 记忆NumPy矢量化函数,python,numpy,Python,Numpy,我有一个函数is_prime(n),如果n是prime,则返回True,否则返回False。在NumPy中,我正在循环,检查数组是否包含素数,并且数组的开头在每次迭代中都是相同的,因此我想记住is_prime(n)函数,以避免大量不必要的计算 因为我有一个数组,所以我想将is_prime(n)矢量化,这样我就可以将它逐元素应用到数组中,以NumPy样式。我使用NumPy教程(稍后显示)中的一行代码完成此操作 我还使用了我在网上找到的备忘录模板: def memoize(function):
def memoize(function):
cache = {}
def decorated_function(*args):
if args in cache:
return cache[args]
else:
val = function(*args)
cache[args] = val
return val
return decorated_function
然后:
但是,如果我现在将已记忆的is_prime函数向量化,那么V_prime现在是否正确记忆
V_prime = np.vectorize(is_prime)
谢谢让我们来测试一下
import numpy as np
def test(input):
return input
def memoize(function):
cache = {}
def decorated_function(*args):
if args in cache:
print 'cached'
return cache[args]
else:
print 'not cached'
val = function(*args)
cache[args] = val
return val
return decorated_function
test = memoize(test)
print test(9)
print test(9)
test = np.vectorize(test)
print test(9)
print test(10)
print test(10)
我在我的机器上得到这个
not cached
9
cached
9
cached
cached
9
not cached
10
cached
10
所以是的,它是memoize,在我的机器上使用numpy 1.6.1哦,好吧,那太聪明了!非常感谢。没问题,记忆化很酷,不过要小心,因为它会消耗相当多的内存,具体取决于您使用的对象类型。。。当内存不足或有一段时间没有访问对象时,人们倾向于使用专用对象而不是字典来控制/监视内存,并销毁/删除对象。
not cached
9
cached
9
cached
cached
9
not cached
10
cached
10