【问题标题】:Python: maximization of functionPython:功能最大化
【发布时间】:2017-09-26 23:14:34
【问题描述】:

假设我有以下简单的函数和输入:

dates = pd.date_range('20170101',periods=20)
a1 = np.ones(3)
b1 = pd.DataFrame(np.random.randint(10,size=(20,3)),index=dates,columns=['foo','bar','see'])
def test_func(a,b):
        c = (a*b).sum(axis=1)
        d = c.std()*np.sqrt(3)
        e = c.mean()/d
        return -np.array(e) 

我想解决这个函数来最小化输出(最大化 e)。

scipy.optimize.fmin(test_func,a1,args=(b1))

但这会引发类型错误

TypeError: test_func() takes 2 positional arguments but 4 were given

我的问题是 i)这是解决此类函数最大值的好方法,以及 ii)问题出在哪里?

【问题讨论】:

  • 第二部分很清楚。你在滥用 test_func。检查here。您正在提供额外的输入

标签: python function pandas optimization scipy


【解决方案1】:

您在额外参数中的b1 后面缺少逗号:

scipy.optimize.fmin(test_func,a1,args=(b1,))

似乎有效。

【讨论】:

  • 太棒了!这很有帮助。所以要清楚,'args' 参数需要一个尾随逗号和 1,但不是 2,变量?对于需要更多输入的其他功能,我使用了 'args=(b1,c1,d1)' 并且效果很好。
  • 没错:(b1,) 是一个只有一个元素的元组,而(b1) 只是b1 本身。来自docs:“一个特殊的问题是包含 0 或 1 个项目的元组的构造:语法有一些额外的怪癖来容纳这些。空元组由一对空括号构成;一个包含一个项目的元组被构造在值后面加上逗号(将单个值括在括号中是不够的)。丑陋,但有效。”
猜你喜欢
  • 2019-03-17
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多