You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scipy.brute优化接收DataFrame的目标函数时参数报错如何解决

报错原因
  • Scipy的optimize.brute的args参数要求传入参数元组,你直接传入可迭代的processed对象时,Python会自动将其拆解为多个独立的位置参数传入bwp函数,你的processed共有3757行,因此会抛出“需要2个参数但收到3757个”的类型错误。
  • 此前使用nelder-mead方法可正常运行,大概率是你之前传参时无意识写对了单元素元组格式。
修复方法

仅需要将args参数的取值改为单元素元组即可,在processed后补充一个英文逗号声明为元组。另外你当前bwp函数中用的processed[i, 3]是Numpy数组的索引写法,如果你传入的确实是Pandas的DataFrame,需要同步修改为iloc索引,避免后续触发索引报错。

修改后的完整代码如下:

# 修复索引写法后的目标函数
def bwp(x, processed):
    pred,real = x
    money = 1000
    for i in range(0, len(processed)):
        if processed.iloc[i, 3] > pred and processed.iloc[i-1,4] > real:
            money = money + (money * processed.iloc[i, 4])
    return money * -1

# 修复传参格式后的优化函数
def opt_2(processed):
    bounds = (slice(-1, 1), slice(-1, 1))
    # 注意args参数传入的是单元素元组,后面必须加逗号
    resbrute = optimize.brute(bwp, ranges=bounds, args=(processed,), full_output=True, finish=optimize.fmin)
    print(resbrute[0])
    print(resbrute[1])

内容的提问来源于stack exchange,提问作者tribo32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:39:03