在Python中重复使用序列作为列表的一部分

时间:2014-05-10 16:43:13

标签: python numpy sequence

我有一个列表(实际上我想使它成为一维numpy数组),其第一个和最后一个元素将保持不变但其他元素是优化的对象,即经常更改并需要在一个单独的变量(因为scipy.optimize.leastsq()需要它)。 所以我已经有了这个代码来放置常数"外部"元素和不断变化的元素:

b_0 = 1      # this will stay constant
b_n = 10     # this as well

def _b(b_0, b_n, b_in):
    import numpy as np            
    b = np.zeros((b_inner.shape[0]+2))
    b[0] = b_0
    b[-1] = b_n
    b[1:-1] = b_in
    return(b)

>>> b_in = range(2,10)
>>> _b(b_0, b_n, b_in)   #returns array([1,2,3,4,5,6,7,8,9,10])

这对我来说看起来非常不优雅,而且我确信必须有一种方法可以在一行中定义

b = np.array([b_0, somefunction(b_in), b_n])

对于背景,我需要这个,因为我有一个带有1D数组的minimalsq的错误函数,其中只有内部元素被优化。我将上面的结果与lambda函数一起提供给错误函数的其他参数,这样我只能传递更改为leastsq的东西:

err_func = lambda b_in: error_function(_b(b_0,b_n,b_in), other_parameters)

b_in_0 = range(2,10)   # starting guess
target = scipy.optimize.leastsq(err_func, b_in_0)

因为我对不同类型的优化使用相同的错误函数(函数可以适应不同的方面和不同类型的约束),我不想为特定目的重写错误函数

1 个答案:

答案 0 :(得分:2)

我认为np.r_可能是您正在寻找的。您可以使用np.r_[b_0, somefunction(b_in), b_n],例如:

np.r_[12, np.arange(5), 13]
# array([12,  0,  1,  2,  3,  4,  5, 13])