速度を上げるには、一連の値をとり とカバーに仕様を満たすために8000iは以下のコードを作成して自分のコード
の平均値XとRとの間の10個の数字を生成します可能な限り範囲を広げ、標準偏差も計算しました。これは広がりの良い尺度です。サンプルセットは、8000の平均値の基準を満たしている時はいつでもだから、私は前の試合にそれを比較し、常に最高のSTD DEVを持っているサンプルを選択
def node_timing(average_block_response_computational_time, min_block_response_computational_time, max_block_response_computational_time):
sample_count = 10
num_of_trials = 1
# print average_block_response_computational_time
# print min_block_response_computational_time
# print max_block_response_computational_time
target_sum = sample_count * average_block_response_computational_time
samples_list = []
curr_stdev_max = 0
for trials in range(num_of_trials):
samples = [0] * sample_count
while sum(samples) != target_sum:
samples = [rd.randint(min_block_response_computational_time, max_block_response_computational_time) for trial in range(sample_count)]
# print ("Mean: ", st.mean(samples), "Std Dev: ", st.stdev(samples),)
# print (samples, "\n")
if st.stdev(samples) > curr_stdev_max:
curr_stdev_max = st.stdev(samples)
samples_best = samples[:]
return samples_best[0]
私は最初の値をとる(常に= 8000の意味)このコードは非常に遅いです、私はシミュレーション中にこのコードを数千回呼び出す必要がありますので、コードの効率を改善する必要があります。
誰にでも何か提案がありますの仕方 ?
アップグレードの可能性はありますが、forのサンプルを開始する必要はありません。また、samples_bestを設定するときにリストをコピーする必要はありません。たくさん改善したい場合は、pypyやcythonを使うことができます。最後に、それは私には非確定的だと思われますが...決定論的なアルゴリズムを書くことはできませんか?たぶん平均とすべての要素を開始し、ランダムに変更しますか? –
小さい:私はこれがうまくいくのに驚いています: 'の間にsum(samples)!= target_sum:'、 'samples'はランダムな整数を含んでいます。確かに '> = '比較のようなものが良いでしょうか? – Evert
私の意見では、Pythonの 'random'モジュールは遅く、ほとんどのコードをnumpyまたはnumbaに移動します。 –