У меня есть два массива 1D, один для измеренных данных, а другой для местоположения. Например, измеренные данные могут быть температура и другой массив высоты измерения:Интервальное среднее данных 1D
temp = np.asarray([10, 9.6, 9.3, ..., -20.3, -21.0]) # Temperature in celsius
height = np.asarray([129, 145, 167, ..., 5043, 5112]) # Height in meters
Как видно, высота измерений не равномерно распределены.
Я хочу вычислить среднюю температуру на регулярных расстояниях. Это некоторая скользящая средняя, но размер окна является переменным, потому что точки данных внутри интересующего интервала не всегда одинаковы.
Это может быть сделано с для цикла следующим образом:
regular_heights = np.arange(0, 6000, 100) # Regular heights every 100m
regular_temps = []
for i in range(len(regular_heights)-1):
mask = np.logical_and(height > regular_heights[i], height < regular_heights[i+1])
mean = np.mean(temp[mask])
regular_temps.append(mean)
regular_temps = np.hstack((regular_temps))
мне не нравится этот подход, который много и мне было интересно, если бы более «NumPy стиле» решение.
Вы хотите «скользящей средней» или «среднюю температуру в равномерно расположенных интервалах»? То есть, если у вас есть N интервалов, вам нужны N средних значений или вы хотите непрерывное среднее значение с помощью движущегося окна (которое охватывает диапазон высот в каждом месте)? – tom10
Как я уже сказал в своем commnet для ответа @elyase, мне, вероятно, нужно сначала определить среднее значение в регулярных интервалах, а затем сгладить его сплайном. Однако скользящее среднее также может быть хорошим в сочетании с сплайном. –