[英]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.