найти средние значения бинов, используя python histogram2d

Как вы вычисляете средние значения для бинов с 2D-гистограммой в python? У меня есть диапазоны температур для оси x и y, и я пытаюсь построить вероятность молнии с использованием бункеров для соответствующих температур. Я читаю данные из файла csv, и мой код таков:

filename = 'Random_Events_All_Sorted_85GHz.csv' df = pd.read_csv(filename) min37 = df.min37 min85 = df.min85 verification = df.five_min_1 #Numbers x = min85 y = min37 H = verification #Estimate the 2D histogram nbins = 4 H, xedges, yedges = np.histogram2d(x,y,bins=nbins) #Rotate and flip H H = np.rot90(H) H = np.flipud(H) #Mask zeros Hmasked = np.ma.masked_where(H==0,H) #Plot 2D histogram using pcolor fig1 = plt.figure() plt.pcolormesh(xedges,yedges,Hmasked) plt.xlabel('min 85 GHz PCT (K)') plt.ylabel('min 37 GHz PCT (K)') cbar = plt.colorbar() cbar.ax.set_ylabel('Probability of Lightning (%)') plt.show() 

Это делает красиво выглядящий сюжет, но данные, которые построены, это количество или количество выборок, которые попадают в каждый бит. Верификационная переменная представляет собой массив, содержащий 1 и 0, где 1 указывает на молнию, а 0 указывает на отсутствие молнии. Я хочу, чтобы данные на графике были вероятностью молнии для данного бина на основе данных из верифицирующей переменной, поэтому мне нужно bin_mean * 100, чтобы получить этот процент.

Я попытался использовать подход, подобный тому, что показано здесь ( данные бининга в python с scipy / numpy ), но мне было трудно заставить его работать для 2D-гистограммы.

2 Solutions collect form web for “найти средние значения бинов, используя python histogram2d”

Это выполнимо, по крайней мере, со следующим методом

 # xedges, yedges as returned by 'histogram2d' # create an array for the output quantities avgarr = np.zeros((nbins, nbins)) # determine the X and Y bins each sample coordinate belongs to xbins = np.digitize(x, xedges[1:-1]) ybins = np.digitize(y, yedges[1:-1]) # calculate the bin sums (note, if you have very many samples, this is more # effective by using 'bincount', but it requires some index arithmetics for xb, yb, v in zip(xbins, ybins, verification): avgarr[yb, xb] += v # replace 0s in H by NaNs (remove divide-by-zero complaints) # if you do not have any further use for H after plotting, the # copy operation is unnecessary, and this will the also take care # of the masking (NaNs are plotted transparent) divisor = H.copy() divisor[divisor==0.0] = np.nan # calculate the average avgarr /= divisor # now 'avgarr' contains the averages (NaNs for no-sample bins) 

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

Это элегантный и быстрый способ сделать это! Используйте параметр weights для значений суммы:

 denominator, xedges, yedges = np.histogram2d(x,y,bins=nbins) nominator, _, _ = np.histogram2d(x,y,bins=[xedges, yedges], weights=verification) 

Поэтому вам нужно разделить в каждом бине сумму значений по количеству событий:

 result = nominator / denominator 

Вуаля!

  • Вычислить все возможные разности столбцов в матрице
  • Логнормальное распределение в python
  • Как передать массивы в Scipy Interpolate RectBivariateSpline?
  • Как вычислить scipy разреженный матричный определитель, не превращая его в плотный?
  • Python: проектирование фильтра временных рядов после анализа Фурье
  • Установка SciPy и NumPy с помощью pip
  • Установка только одного параметра функции со многими параметрами в python
  • не может установить scipy-freezes на «Запуск setup.py install for scipy»
  • Python - лучший язык программирования в мире.