簡體   English   中英

Python中模板的模擬

[英]Analog of templates in 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 ++中,我可以編寫一個模板類/模板函數,它將(指向一個)方法作為參數。

我想問一下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)

我不確定我是否理解這個問題,但聽起來你想將函數作為函數參數傳遞? 您可以在python中執行bat的權利,因為所有內容都通過引用傳遞,並且沒有什么可以阻止您將對函數的引用作為參數傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM