假设我有一个矩阵X,其中每一行代表一个时间序列。例如,X可能是一个大小为3 X 1000的矩阵,这意味着有3个时间序列,每个时间序列由1000个时间点组成。除了X之外,X中的每个时间序列都有一个标量。我想找到一个线性组合
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)