2014-09-02 5 views
1

일부 매개 변수에 따라 다르며 출력이 배열 인 함수가 있습니다. 예 :각 meshgrid 포인트의 값 배열 계산

def my_func(xs,param1,param2,param3): 
    values = xs**param1 + xs*param2**2 + param3*xs 
    return values 

여기서 xs는 값이있는 배열입니다. I는 params1, params2 및 params3의 각 가능한 조합 my_func의 출력을 계산하고자

xs = np.arange(0,10,1) 
params1 = np.arange(5,10,1) 
params2 = np.arange(1,30,1) 
params3 = np.arange(1,20,1) 

: Suposse는 또한 각 매개 변수에 대한 값의리스트를 갖는다. 아이디어는 카이 제곱을 계산하고 출력을 사용하여 베이지안 분석을 수행 할 수있게하는 것입니다. 중첩 된 for 루프를 사용하여 수행 할 수 있음을 알고 있지만 mehsgrid로 처리 할 수 ​​있는지 궁금합니다. 나는 다음을 시도했다. 그러나 그것은 깨진다 :

P1, P2, P3 = np.meshgrid(params1,params2,params3) 
results = my_func(xs,P1,P2,P3) 

     1 def my_func(xs,param1,param2,param3): 
----> 2  values = xs**param1 + xs*param2**2 + param3*xs 
     3 
     4 
     5 xs = np.arange(0,10,0.1) 

     ValueError: operands could not be broadcast together with shapes (100,) (10,10,40) 

이것이 어떻게 행해질 수 있는지에 대한 아이디어가 있는가?

편집 : @unutbu의 답변이 작동하지만, 출력 결과에 관한 추가 질문이 하나도 없습니다. 나는 쉽게 설명 할 수 있도록 매개 변수 범위를 변경했습니다.

np.meshgrid위한 파라미터로서 xs를 통과 한 후, results의 형상을 의미

np.shape(results) 
(5, 10, 29, 19) 

이다 축 0이 param1이다 에서 축이 xs이다 축 2는 param2이며 axis3는 param3이다.

출력에 xs이 축 = 1 인 이유는 무엇입니까? 나는 주문이 np.mesgrid, 즉 xs,param1,param2, param3으로 이어진 것을 따를 것을 기대합니다.

Edit2가 :

미안, 난 그냥 np.meshgrid에 대한 "색인"keyworkd을 발견했다. 누가 그것을 사용할 계획이라면 누구나 색인 생성이 필요하면 np.meshgrig(arguments,indexing='ij')을 사용하십시오. np.meshgrid에 인수로도

답변

1

패스 xs : 여러분들의 도움에 대한

import numpy as np 

def my_func(xs,param1,param2,param3): 
    values = xs**param1 + xs*param2**2 + param3*xs 
    return values 

xs = np.arange(0,10,0.1) 
params1 = np.arange(1,2,0.1) 
params2 = np.arange(1,2,0.1) 
params3 = np.arange(1,5,0.1) 

X, P1, P2, P3 = np.meshgrid(xs, params1, params2, params3, sparse=True, indexing='ij') 
my_func(X, P1, P2, P3) 
+0

감사합니다 :) 지금, 나는 출력의 형식에 관한 추가 질문이 있습니다. 나는 그것을 설명하기 위해 나의 질문을 편집했다. –

+0

오, 좋았어. 이미 답을 찾은 것처럼 보입니다. – unutbu