python - 在 Python 中重新使用序列作为列表的一部分

标签 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])

对于背景,我需要这个,因为我有一个最小平方误差函数,它采用一个一维数组,其中仅优化内部元素。我将上述结果提供给 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/

相关文章:

python - 如何在 tkinter 中以编程方式将相同的操作关联到一组按钮?

Python Numpy 逻辑回归

python - 在 Python Pandas DataFrame 中将 timedelta64[ns] 列转换为秒

python - 从函数中 exit() 是一种错误的形式吗?

python - Python 中没有构造函数重载——缺点?

python - 当线程完成时,如何更改 Flask 中渲染的模板?

python - 在 numpy 中合并矩阵

R找到最大序列长度和位置

r - 对 r 中的连续整数进行分组并对组进行分析

date - pyspark-生成日期序列