我有一个列表(实际上我想将其设为一维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])
对于背景,我需要这个,因为我有一个最小平方误差函数,它采用一个一维数组,其中仅优化内部元素。我将上述结果提供给 lambda 函数,并将其他参数一起提供给错误函数,这样我就可以只传递更改为 lesssq 的内容:
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)
因为我对不同类型的优化使用相同的误差函数(该函数可以适应不同的方面和不同类型的约束),所以我不想为了特定目的重新编写误差函数.
最佳答案
我认为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])
关于python - 在 Python 中重新使用序列作为列表的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23583743/