Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用Scipy最小化数据线性组合的函数_Python_Linux_Optimization_Scipy_Linear Algebra - Fatal编程技术网

Python 用Scipy最小化数据线性组合的函数

Python 用Scipy最小化数据线性组合的函数,python,linux,optimization,scipy,linear-algebra,Python,Linux,Optimization,Scipy,Linear Algebra,假设我有一些矩阵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): retu

假设我有一些矩阵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)

在哪里定义
f
?我在这里省略了它。它返回一个标量值。我相信这个问题在某种程度上与传递最小化的参数有关,但我不知道出了什么问题。a不是这样工作的。定义f(x):返回0进行测试?抱歉,我不知道发布的要求这里的要点是:我们很难找出问题所在,因为我们看不到到底是什么代码产生了错误。一个好的问题是尽量将错误减少到最小数量的代码,这些代码可以复制错误,也可以由其他人运行。