python - 带有函数接收列表的等高线图
问题描述
我有一些函数f(list)
接收一个长度为2的列表作为参数,即list = [entry_1,entry_2]。我需要做这个函数的等高线图:
x = np.linspace(0, 2, 1000+1)
y = np.linspace(0, 2, 1000+1)
X, Y = np.meshgrid(x, y)
Z = ?
plt.contour(X, Y, Z)
plt.show()
问题是:我不知道如何传递论点。如果函数的类型是 f(x,y),那么
Z = f(X, Y)
会做的工作。但
Z = f([X,Y])
失败:它接收到太多参数。我怎样才能做到这一点?
编辑:这是程序的功能:
from scipy.optimize import minimize
def c_Gamma_gamma_fv(cf, cv):
return np.abs((4 * eta_gamma * charges**2 * a_q * cf).sum() + 4.* cf *a_tau/3. + a_w * cv)**2/Gamma_gamma
def mu_fv(cf, cv):
return np.array([cf**4,
cf**2 * cv**2,
cf**2 * c_Gamma_gamma_fv(cf, cv),
cv**2 * c_Gamma_gamma_fv(cf, cv),
cf**4,
cv**2 * cf**2,
cf**2 * cv**2,
cv**4,
cv**2 * cf**2,
cv**4])
def chi_square_fv(clist):
cf, cv = clist
return ((mu_fv(cf, cv) - mu_data) @ inv_cov @ (mu_fv(cf, cv) - mu_data))
x0 = [1., 1.]
res_fv = minimize(chi_square_fv, x0)
print(res_fv)
def delta_chi_fv(clist):
return chi_square_fv(clist) - chi_square_fv([res_fv.x[0], res_fv.x[1]])
所有不显式的变量都是常量。我要绘制的函数是 delta_chi_fv。
解决方案
我找到的解决方案(在我大学的一位教授的帮助下)虽然不是最快的,但有效:
Z = np.zeros((len(x), len(y)))
for i in range(len(x)):
for j in range(len(y)):
z = delta_chi_fv([x[i], y[j]])
Z[i,j] = z
有了 Z 的这种结构,那么
plt.contour(X,Y,Z)
工作正常。如果有人知道另一个答案,那么了解更多关于这种语言的东西会很棒。
干杯,加布里埃尔。