integrate.quad is a python wrapper to the DQAGSE function from QUADPACK. This function uses adaptive quadrature, i.e. it will apply a fixed rule (in this case Gauss-Kronrod) on intervals that it will adaptively refine trying to reach the absolute and/or relative tolerance you requested.
Since the parameter
d alters the behaviour of the function, it will also change the iterative interval refinement. Hence, it doesn't make sense to "vectorize".
What you could do is use the Pool class from the multiprocessing module in the standard Python library. Distribute your values of
d over multiple cores. Wrap your integral in a function:
import numpy as np
import scipy.integrate as integrate
from multiprocessing import Pool
if __name__ == '__main__':
d_array = np.array([1, 0.1, 2.0])
pool = Pool(processes=3)
The only restriction with this solution is that it doesn't work in interactive modes (so not in Jupyter notebooks nor Qtconsole). See here.