У меня есть следующая функция, которая генерирует двойной гауссов.
def Model(wavelength_array, width):
"""Returns the model
Parameters: wavelength_array: Full wavelength array. This is a constant
width: width of the Gaussians. This varies.
"""
Gaussian = lambda x, mean, std: np.exp(-((x[:, np.newaxis] - mean)/std)**2)
separation = (3729.875-3727.092)/2
lambda0 = wavelength_array[:,(len(wavelength_array[0])+1)//2]
models = []
for i,j in enumerate(wavelength_array):
models.append(Gaussian(j, lambda0[i]-separation, width) + \
Gaussian(j, lambda0[i]+separation, width))
models = np.asarray(models)
return models
wavelength_array - это массив массивов, а width это массив, например:
wavelength_array = [[4500, 4502, 4504, 4506] [4502, 4504, 4506, 4508]]
width = np.arange(.1, .5, .1)
Я бынравится перебирать каждый массив в wavelength_array
и каждый элемент в width
.Наивно это означало бы двойную петлю.Однако недавно я узнал о вещании и смог транслировать часть кода width
.К сожалению, у меня все еще есть цикл, который повторяется по wavelength_array
, и я не уверен, как я также могу транслировать по этой переменной.Если у вас есть какие-либо предложения и / или отзывы о том, как я могу полностью векторизовать эту функцию и ускорить ее, я был бы очень признателен.