Как интегрировать использование scipy с массивом как часть функции - PullRequest
2 голосов
/ 02 февраля 2020

Я хотел бы использовать интегральную команду в scipy и иметь функцию, которая умножается на каждый элемент массива один раз.

import math 
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
from scipy.integrate import quad, romberg
import scipy.special as special
from numpy import sqrt

yes = np.array([0,1])

def integrate(x,yes):
    return x+yes

result = quad(integrate,0,1,args=(yes))

print(result)

, когда я делаю это, я получаю ошибку только размер -1 массивы можно преобразовать в Python скаляры

Но если я сделаю это

import math 
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
from scipy.integrate import quad, romberg
import scipy.special as special
from numpy import sqrt

yes = np.array([0])

def integrate(x,yes):
    return x+yes

result = quad(integrate,0,1,args=(yes))

print(result)

, это даст мне (0,5, 5,551115123125783e-15) Это именно то, что я хочу, но я бы хотел, чтобы это было для каждого элемента массива.

Есть ли способ написать для l oop? Я также слышал о scipy.integrate.quad_ve c, но это не сработало. Заранее спасибо

1 Ответ

0 голосов
/ 03 февраля 2020

Вы можете использовать quadpy , он полностью векторизован. Просто убедитесь, что ваша функция f, если задан вход x определенной длины / формы, возвращает объект формы range_shape + x.shape. Результат будет иметь форму range_shape.

import numpy as np
from quadpy import quad


def f(x):
    return np.add.outer(np.array([0, 1]), x)


val, err = quad(f, 0, 1)
print(val)
[0.5 1.5]
...