Python 计算每个网格点的值数组
我有一个函数,它依赖于一些参数,输出是数组。例如:Python 计算每个网格点的值数组,python,numpy,Python,Numpy,我有一个函数,它依赖于一些参数,输出是数组。例如: def my_func(xs,param1,param2,param3): values = xs**param1 + xs*param2**2 + param3*xs return values 其中xs是一个具有值的数组。Suposse I还提供了每个参数的值列表: xs = np.arange(0,10,1) params1 = np.arange(5,10,1) params2 = np.arange(1,30,1)
def my_func(xs,param1,param2,param3):
values = xs**param1 + xs*param2**2 + param3*xs
return values
其中xs是一个具有值的数组。Suposse I还提供了每个参数的值列表:
xs = np.arange(0,10,1)
params1 = np.arange(5,10,1)
params2 = np.arange(1,30,1)
params3 = np.arange(1,20,1)
我想为params1、params2和params3的每个可能组合计算我的_func的输出。其思想是能够计算卡方,并对输出进行贝叶斯分析。
我知道可以用嵌套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
的参数传递后,结果的形状为
np.shape(results)
(5, 10, 29, 19)
意思是:
axis0是param1
,
axis1是xs
,
axis2是param2
,并且
axis3是param3
为什么输出中将xs
放入轴=1?我希望命令遵循传递给np.mesgrid
的内容,即xs、param1、param2、param3
Edit2:
抱歉,我刚刚发现了np.meshgrid的“索引”键。如果有人在我计划使用时需要索引,请使用np.meshgrig(arguments,index='ij')
Passxs
也作为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)
谢谢你的帮助,效果很好:)现在,我有一个关于输出格式的额外问题。我编辑了我的问题来解释它。