我已經建立下面的代碼速度,它需要一系列值, 並用8000增加的我的代碼
的平均值,以滿足規範,以覆蓋生成X和R 10級之間的數字範圍以及可能的情況下,我也計算了標準偏差,這是一個很好的衡量指標。因此,只要樣本集滿足8000均值的標準,我把它比以前的比賽和不斷選擇具有最高標準偏差的樣本(平均總= 8000)
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]
我採取的第一個值中列表並將其用作定時值,但是此代碼非常慢,我需要在模擬過程中將這段代碼調用數千次,因此需要提高代碼的效率。有些人如何獲得任何建議如何 ?
可能小的升級,但你不需要在for中啓動示例。在設置samples_best時,您也不需要複製列表。如果你想改進很多,你可以嘗試使用pypy或cython。最後,雖然對我來說似乎是不確定的......你不能爲它寫一個確定性的算法嗎?也許開始所有的元素與平均值,然後隨機改變它們? –
小撇:我很驚訝這會起作用:'while sum(samples)!= target_sum:',因爲'samples'包含隨機整數。肯定像'> ='比較比較好? – Evert
在我看來,python的'random'模塊很慢,我會將大部分代碼移入numpy或numba。 –