亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何優化python中向量函數的最小化?

如何優化python中向量函數的最小化?

慕哥9229398 2021-11-16 16:58:53
我有一個問題:我試圖找到一個函數的最小值,該函數取決于我也想更改的幾個參數。讓我們舉一個簡單的例子:import numpy as npimport scipy.optimize as optdef f(x, a, b, c):    f = a * x**2 + b * x + creturn f我想找到使 a、b、c 的不同組值的函數最小化的 x,讓我們說a = [-1, 0, 1]b = [0, 1, 2]c = [0, 1]ATM 我有三個嵌套循環和一個最小化:for p1 in a:    for p2 in b:         for p3 in c:            y = opt.minimize(f, x0=[0, ], args=(p1, p2, p3, ))            print(y)這對于我正在做的計算來說真的很慢,但到目前為止我還沒有找到更好的。那么,有沒有人知道可以讓我提高效率的方法或包?
查看完整描述

2 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

您可以結合使用不同的技術來提高腳本的效率:

  1. 使用itertools.product生成列表中的每個可能的組合a, b, c

  2. 用于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 秒。


查看完整回答
反對 回復 2021-11-16
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

scipy.optimize.newton 可以做到這一點。


查看完整回答
反對 回復 2021-11-16
  • 2 回答
  • 0 關注
  • 250 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號