Контурный график с функцией получения списков - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть какая-то функция 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.

1 Ответ

0 голосов
/ 29 апреля 2018

Решение, которое я нашел (с небольшой помощью профессора в моем университете), хотя и не самое быстрое, работает:

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)

отлично работает. Если кто-то знает другой ответ, было бы здорово узнать больше об этом языке.

Ура, Габриэль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...