【问题标题】:Contour plot with function receiving lists带有函数接收列表的等高线图
【发布时间】:2018-10-05 08:50:53
【问题描述】:

我有一些函数 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。

【问题讨论】:

  • 你能把你所有的回溯信息贴上来吗?
  • 给我们更多关于函数的信息。
  • 此行失败:res_fv = minimize(chi_square_fv, x0)minimize 未定义。 chi_square_fv([X,Y]) 运行良好,直到遇到未定义的变量。
  • 对,我忘了:from scipy.optimize import minimize

标签: python numpy matplotlib contour


【解决方案1】:

我找到的解决方案(在我大学的一位教授的帮助下)虽然不是最快的,但有效:

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)

工作正常。如果有人知道另一个答案,那么了解有关这种语言的更多信息会很棒。

干杯, 加布里埃尔。

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 2021-11-05
    • 2017-08-14
    • 2022-11-03
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多