记住NumPy矢量化函数

时间:2012-06-14 20:09:58

标签: python numpy

我有一个函数 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)

谢谢

1 个答案:

答案 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