2014-09-02 104 views
1

我有一個函數,它依賴於一些參數和哪個輸出是一個數組。例如:計算每個meshgrid點的值數組

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

其中xs是一個包含值的數組。 Suposse我也有每個參數的值的列表:

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

我想計算my_func,並將輸出爲params1,params2和params3的每個可能的組合。這個想法是能夠計算卡方,並用輸出進行貝葉斯分析。 我知道它可以用嵌套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的答案工作,但沒有我有一個額外的問題關於其輸出格式。我改變了參數範圍,因此可以很容易地解釋。

傳遞xs作爲參數用於np.meshgrid後,results形狀是

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

含義是: axis0是param1, AXIS1是xs, 的axis2是param2,和 axis3是param3

爲什麼xs將axis = 1放在輸出中?我預計訂單將遵循傳遞給np.mesgrid的數量,即xs,param1,param2, param3

EDIT2:

對不起,我剛纔發現了np.meshgrid的 「索引」 keyworkd。如果任何人需要使用索引,請使用np.meshgrig(arguments,indexing='ij')

回答

1

xs也作爲參數傳遞給np.meshgrid

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

感謝您的幫助,該工作:)現在,我有一個關於輸出格式的額外問題。我編輯了我的問題來解釋它。 – 2014-09-03 15:10:29

+0

哦,很好 - 看起來你已經找到了答案。 – unutbu 2014-09-03 17:16:27