我有一个函数 is_prime(n),如果 n 是素数,则返回 True ,否则返回 False 。在NumPy我循环,检查数组是否包含素数,并且每次迭代时数组的开始都是相同的,所以我想记住 is_prime(n)函数以避免很多不必要的计算。
由于我有一个数组,我想向量化 is_prime(n)所以我可以逐个元素,NumPy样式将它应用于数组。我使用NumPy教程中的一行(稍后显示)
我还使用了我在网上找到的记忆模板:
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 = memoize(is_prime)
但是,如果我现在对已记忆的 is_prime 函数进行矢量化,V_prime现在是否已正确记忆?:
V_prime = np.vectorize(is_prime)
谢谢
答案 0 :(得分:5)
好吧,让我们测试一下。
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