2 回答
TA貢獻1820條經驗 獲得超9個贊
您可以結合使用不同的技術來提高腳本的效率:
使用
itertools.product生成列表中的每個可能的組合a, b, c用于
multiprocessing并行執行最小化。
除此之外,我想不出優化代碼效率的方法。正如評論中指出的,常數值 c 對最小化沒有影響。但我確定二次函數只是一個例子。
我從這里獲取了多處理部分的代碼。
這是工作代碼。
import numpy as np
import scipy.optimize as opt
import itertools
from multiprocessing import Pool
def f(x, a, b, c):
f = a * x**2 + b * x + c
return f
def mini(args):
res = opt.minimize(f, x0=np.array([0]), args=args)
return res.x
if __name__=="__main__":
a = np.linspace(-1,2,100)
b = np.linspace(0,2,100)
c = [0, 1]
args = list(itertools.product(a,b,c))
print("Number of combos:" + str(len(args)))
p = Pool(4)
import time
t0 = time.time()
res = p.map(mini, args)
print(time.time()-t0)
即使是這 20000 個組合,在我的普通筆記本電腦上也只需要 5.28 秒。
添加回答
舉報
