Python中的模板仿真

2024-05-13 05:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

作为我运行的一些模拟的一部分,我需要输出一些算法输出的累积分布:

tests = []
numtests = 100
for i in range(0, numtests):
    #random
    zeros = [0] * 1024
    ones = [1] * 10
    #ones = [randint(0,1023) for _ in range(0,10)]
    input =  zeros + ones
    shuffle(input)
    tests.append(HGBSA(input,10))

count = [x[0] for x in tests]
found = [x[1] for x in tests]
found.sort()
num = Counter(found)
freqs = [x for x in num.values()]
cumsum = [sum(item for item in freqs[0:rank+1]) for rank in range(len(freqs))]
normcumsum  = [float(x)/numtests for x in cumsum]

print(freqs)
print(cumsum)
print(normcumsum)
print(sorted(num.keys()))

figure(0)
plt.plot(sorted(num.keys()), normcumsum)
plt.xlim(0,100)
plt.show()

如上面的代码所示,我使用随机生成的输入运行算法100次,然后根据结果创建一个累积分布。你知道吗

我想对其他算法做类似的事情,在c++中我可以编写一个模板类/模板函数,它以一个(指向一个)方法的指针作为am参数。你知道吗

我想问一下,在python中是否有一种方法可以创建一个函数/类,该函数/类生成我想要的输出,但将一个函数作为输入,这样我就避免了到处重复代码。你知道吗


Tags: 函数in算法forinputonestestsrange
2条回答

我不确定我是否理解这个问题,但听起来你想把一个函数作为函数参数传递?在python中,您完全可以做到这一点,因为所有内容都是通过引用传递的,没有什么可以阻止您将引用作为参数传递给函数。你知道吗

这在Python中很简单。您可以像其他任何东西一样传递函数(或类)。你知道吗

def run_test(test_function):
    tests = []
    numtests = 100
    for i in range(0, numtests):
        #random
        zeros = [0] * 1024
        ones = [1] * 10
        #ones = [randint(0,1023) for _ in range(0,10)]
        input =  zeros + ones
        shuffle(input)
        tests.append(test_function(input,10))

    count = [x[0] for x in tests]
    found = [x[1] for x in tests]
    found.sort()
    num = Counter(found)
    freqs = [x for x in num.values()]
    cumsum = [sum(item for item in freqs[0:rank+1]) for rank in range(len(freqs))]
    normcumsum  = [float(x)/numtests for x in cumsum]

    print(freqs)
    print(cumsum)
    print(normcumsum)
    print(sorted(num.keys()))

    figure(0)
    plt.plot(sorted(num.keys()), normcumsum)
    plt.xlim(0,100)
    plt.show()

run_test(HGBSA)
run_test(SOME_OTHER_FUNCTION)

相关问题 更多 >