Хорошо, я понял следующее (поправьте меня, если я ошибаюсь):
Что у вас есть:
- Массив
x_fg
с формой (x_size, 1)
- Массив
r_fg
с формой (1, r_size)
- Массив
gpeaks1[i] = f(x_fg[i])
с формой (x_size, 1)
- Массив
gpeaks2[i, j] = g(x_fg[i] + r_fg[j])
с формой (x_size, r_size)
В качестве промежуточного результата у вас также есть:
- Массив
h[j] = ∫_i gpeaks1[i] * gpeaks2[i, j]
с формой (1, r_size)
- Вычислено с
h = integrate.trapz(gpeaks1 * gpeaks2, x_fg, axis=-2)
О w_fg
: после вашего кода к букве w_fg
- это число , а не массив . Но ваш вопрос, по-видимому, указывает на то, что w_fg
- это функция веса, и поэтому она должна быть представлена в виде массива.
Итак, мой первый вопрос: "что такое w_fg
?"
Предполагая:
- Массив
w_fg[j] = w(r[j])
с формой (1, r_size)
Мой второй вопрос: «Что вы хотите рассчитать?»
Если это ∫_j w_fg[j] h[j]
, тогда просто сделайте integrate.trapz(w_fg * h)
.
Предыдущий ответ, который фактически не отвечает на вопрос
Итак, учитывая два одномерных массива f
и g
представляющих функции, вам нужен массив h
, представляющий h(r)=∫f(x)g(x+r)dx
.
. Вы можете полностью сделать это с помощью scipy.trapz
, но интегралы вида h(r)=∫f(x)g(x+r)dx
могут быть намного легче вычислены с помощью np.correlate
или эквивалент в scipy.
Наиболее эффективным способом является использование БПФ. Сейчас у меня нет времени, чтобы написать объяснение, но я добавлю его позже.
Предлагаю вам прочитать о свертках и взаимных корреляциях .