2

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

谢谢

4

1 回答 1

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

于 2012-06-14T20:25:57.870 回答