Расширенное использование гистограммы в Python с NumPy - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно быстро сделать это для больших объемов данных, поэтому в идеале я хочу использовать такой быстрый подход, как numpy.Я обычно просто пишу цикл, но python слишком медленный для этого.Вот проблема:

Я хотел бы сложить суммы в соответствии с ячейками другого массива.например, у меня есть три массива

weights = [100, 130, 112, 150]
ages = [1, 14, 15, 25]

. Я хочу суммировать веса в соответствии с возрастами, которые сгруппированы с ячейками 0-9, 10-19, 20-29.так что я получу [100, 130 + 112, 150] -> [100, 242, 150] в качестве моего конечного результата.

Мое текущее понимание гистограмм numpy таково, что я будутолько суммировать массив, с которым я биннинг.Это означает, что я могу получить сумму возрастов, только если у меня есть возрасты.

Мне также хотелось бы знать, как сделать это хорошо, вероятно, в будущем от меня потребуются другие операции, кроме сумм (например, усреднение их, а не просто сумма).Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 28 ноября 2018

Это может быть сделано довольно просто с помощью понимания списка и некоторых простых логических функций, и оно не будет ограничено только суммированием.

import numpy as np

ages = [1, 14, 15, 25]
weights = np.array([100, 130, 112, 150])  # easier indexing with a np.array
bin_left_marks = np.arange(0, 40, 10)
my_func = np.sum
my_binned_aggregation = [my_func(weights[np.where(np.logical_and(bin_left_marks[i] <= ages, ages < bin_left_marks[i+1]))]) for i in range(len(bin_left_marks) - 1)]

По сути, для каждого бина найдите индексы списка возрастов, которые соответствуют этому бину, и соответствующим образом агрегируйте список весов.
Удачи!


Очевидно,это можно сделать «менее уродливо», разделив эту строку, используя прямую петлю и т. д. Это решение будет кратким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...