Я занимаюсь научными c вычислениями и не могу найти элегантного способа выполнить следующую операцию. Предположим, у меня есть двумерный numpy
массив D
, который хранит измерения заданного количества несколько раз в течение дня. Каждая строка соответствует разному измерительному прибору, а каждый столбец соответствует разному моменту дня, в который проводилось измерение.
Рассмотрим список желаемых процентилей. Например:
quantiles = [0.25, 0.5, 0.75]
Моя цель - вычислить среднее значение по группе процентилей в каждый момент дня. Другими словами, учитывая столбец измерений, я хотел бы отсортировать все измерения из этого столбца по группам в соответствии с приведенными выше квантилями, а затем взять средние значения по группам. Используя этот пример, у меня было бы 4 группы в каждый момент дня: измерения в нижнем квартиле, затем измерения между 25-м и 50-м квартилем, измерения между 50-м и 75-м и, наконец, измерения в последнем квартиле. Следовательно, если m
- это количество моментов в день, когда проводились измерения, а q
- это количество элементов в переменной quantiles
, мой желаемый результат будет q
x m
numpy массив .
В настоящее время я делаю это самым неэффективным и жестко запрограммированным способом. Здесь мы go:
quantiles = [0.25, 0.5, 0.75]
window = "30min"
moments = pd.date_range(start = "9:30", end = "16:00", freq = window).time
quantile_curves = np.zeros((len(quantiles)+1, len(moments)-1))
EmpQuantiles = np.quantile(D, quantiles, axis = 0)
for moment in range(len(moments)-1):
quantile_curves[0, moment] = np.mean(D[:, moment][D[:,moment] < EmpQuantiles[0, moment]])
quantile_curves[1, moment] = np.mean(D[:, moment][np.logical_and(D[:,moment] > EmpQuantiles[0, moment], D[:,moment] <EmpQuantiles[1, moment])])
quantile_curves[2, moment] = np.mean(D[:, moment][np.logical_and(D[:,moment] > EmpQuantiles[1, moment], D[:,moment] <EmpQuantiles[2, moment])])
quantile_curves[3, moment] = np.mean(D[:, moment][D[:,moment] > EmpQuantiles[2, moment]])
Какой изящный и простой способ сделать это? Я не смог найти здесь ответ, однако в R
есть связанный (но не тот же) вопрос: ddply множественные квантили по группам
Я собираюсь построить график эволюции среднее значение в группе в течение дня. Я показываю график, который я получил ниже (я доволен графиком, и я получаю желаемый результат, однако я ищу лучший способ вычисления переменной quantile_curves
):
введите описание изображения здесь
Заранее большое спасибо!