2014-05-10 2 views
2

목록이 있습니다 (실제로 1D 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]) 

이것은 나에게 매우 unelegant보고,이 작업을 수행 할 수있는 방법이 있어야합니다 나는 확신 : 그래서 나는 변화하는 사람과 함께 일정 "외부"요소를 넣어이 코드를 가지고 I 만 내부 요소 최적화되어있는 1 차원 배열을 leastsq하는 에러 함수를 가지고 있기 때문에 배경 내용

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

를 정의하는 하나의 라인은 I이 필요하다. I는 동일한 오차 함수를 사용하고 있기 때문에

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) 

: I가 leastsq으로 만 변경 재료를 통과 할 수 있도록 I는 함께 에러 함수에 다른 파라미터와 람다 함수에 상기의 결과를 공급하고 다른 유형의 최적화 (함수가 적용될 수있는 여러 가지 유형 및 제한 유형의 제약이 있음)에 대해 특정 목적을 위해 오류 함수를 다시 쓰고 싶지는 않습니다.

+1

, [PEP 448] (http://legacy.python.org/dev/peps/pep-0448/)이를 만들 수있는 새로운 문법을 제시 믿을 수 없을만큼 훌륭하게 :'[b_0, * b_in, b_1]'. –

답변

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]) 
+0

그게 효과가! 또한, docs를'np.r_'로 읽어서,'np.concatenate()'가 (내 목적을 위해서) 같은 것을 보았을 때, 단지 몇개의 대괄호 만 필요하다는 것을 알았습니다. – Zak

관련 문제