我有一个函数,它依赖于一些参数和哪个输出是一个数组。例如:计算每个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