使用Scipy最小化数据线性组合的function

假设我有一些matrixX,其中每一行代表一个时间序列。 例如,X可以是大小为3×1000的matrix,这意味着有3个时间序列,每个时间序列由1000个时间点组成。 除了X之外,我还有一个X的每个时间序列的标量。我想find一个线性组合

a [0] * X [0,:] + a [1] * X [1,:] + … + a [n-1] * X [n-1,:]

对于某个函数F具有最小值

所以,我尝试了以下

import numpy as np from scipy.optimization import minimize def f(x): return 0 # for testing purposes def obj(a,x): y = a*x return f(y) minimize(obj, np.array([1,1]), args=np.array([[1,1],[2,2]]), method='nelder-mead') 

所以第二个参数是初始猜测x0(系数a)。 args给出的数据应该映射到x(如果我理解正确)并且在优化过程中保持不变。

但是,我得到的错误

 ValueError: setting an array element with a sequence. 

我想我的问题是相当普遍的,所以我希望有人能够帮助!

像这样的东西?

 import scipy.optimize as opt def f(val): return val**2 def obj(a, series): s = 0 for row in series: for t in range(len(row)): s += f(a[t] * row[t]) return s ll_x = [[2, 3, 2, 6], [3, 5, 2, 7]] # 2 series l_a = [1 for _ in ll_x[0]] # initial coeffs. res = opt.minimize(obj, l_a, args=ll_x, method='nelder-mead') for elem in sorted(res.items()): print(*elem) 

(适用于Python 3.4.3)