我有一個函數,它依賴於一些參數和哪個輸出是一個數組。例如:計算每個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')
。
感謝您的幫助,該工作:)現在,我有一個關於輸出格式的額外問題。我編輯了我的問題來解釋它。 – 2014-09-03 15:10:29
哦,很好 - 看起來你已經找到了答案。 – unutbu 2014-09-03 17:16:27