Я пытаюсь построить интеграл от этого нормального распределения для значений, превышающих й определяются какPython - Интеграция всего списка с гауссовым распределением
где
определение обеих функций в python
import scipy.integrate as integrate
import numpy as np
def gaussian(x, mu, sig):
norm = 1/np.sqrt(2*np.pi*sig*sig)
return norm * np.exp(-np.power(x - mu, 2.)/(2. * sig*sig))
def gaussianGreater(x, mu, sig):
Integrand = lambda x: gaussian(x, mu, sig)
return integrate.quad(Integrand,-np.Inf, x)[0]
Теперь моя проблема заключается в границах интеграции моей функции gaussianGreater
, когда она вычисляется через функцию распределения. При оценке это происходит.
y = gaussianGreater(subdist_1, mu_1, sig_1)
xd = np.argsort(subdist_1)
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
ax.plot(subdist_1[xd] ,y[xd])
ValueError: The truth value of an array with more than one element
is ambiguous. Use a.any() or a.all()
Я попытался изменить верхние границы к тому, что дал мне ошибку, но это будет возвращать ошибку 'float' object has no attribute '__getitem__'
Применив для цикла не работает либо
[gaussianGreater(x, mu_1, sig_1) for x in subdist_1]
TypeError: only integer arrays with one element can be converted to an index
Как исправить Эта проблема?
Какое поведение вы хотите точно? Вы хотите, чтобы аргумент 'x' для' gaussianGreater' мог быть списком значений и использовать наибольший из них в вызове 'integrrate.quad'? – spruceb
@SpruceBondera Я буду лучше разбираться в редактировании. Я просто пытаюсь исправить границы интеграции, как первая функция, которую я опубликовал. – DarthLazar