quad is adaptive. trapezoid uses samples you already have.
Goal
Integrate x^2 from 0 to 3 two ways.
from scipy.integrate import quad
val, err = quad(lambda x: x ** 2, 0, 3)
print(val, err)from scipy.integrate import trapezoid
x = np.linspace(0, 3, 50)
print(trapezoid(x ** 2, x))from scipy.integrate import cumulative_trapezoid
x = np.linspace(0, 3, 6)
print(cumulative_trapezoid(x, x, initial=0).round(3))from scipy.integrate import quad
print(quad(np.sin, 0, np.pi)[0])