Другой альтернативой является использование ufunc.at. Этот метод применяет на месте желаемую операцию по указанным индексам. Мы можем получить позицию бина для каждого datapoint, используя метод searchsorted. Затем мы можем использовать at для увеличения на 1 позиции гистограммы в индексе, заданном bin_indexes, каждый раз, когда встречаем индекс в bin_indexes.

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

from scipy import *
from numpy import *

def get_bin_mean(a, b_start, b_end):
    ind_upper = nonzero(a >= b_start)[0]
    a_upper = a[ind_upper]
    a_range = a_upper[nonzero(a_upper < b_end)[0]]
    mean_val = mean(a_range)
    return mean_val


data = rand(100)
bins = linspace(0, 1, 10)
binned_data = []

n = 0
for n in range(0, len(bins)-1):
    b_start = bins[n]
    b_end = bins[n+1]
    binned_data.append(get_bin_mean(data, b_start, b_end))

print binned_data

Ответы на вопрос(6)

Ваш ответ на вопрос