numpy .Гистограмма работает правильно с весами? - PullRequest
0 голосов
/ 11 февраля 2020

Дорогие все, что у меня есть данные, которые мне нужны, чтобы заметить что-то странное. Код следующий:

# I read the data from a catalog with other information
m = cat['halo_lm']
# Define the bin edges
m_bins = np.linspace(12, 15, 16)
# Compute the histogram
N, bins = np.histogram(m, bins = m_bins, density=False) 
# Compute the sum of the data inside each bin using the data itself as weights
m_mean, bins = np.histogram(m, bins = m_bins, weights=m, density=False) 
# Compute the mean inside each bin dividing it by the number of objects inside the bin
m_mean[N>0] = m_mean[N>0]/N[N>0]
# Compute the corresponding bin-index of each data value
idx = np.digitize(m, bins = m_bins) - 1 
for i, (x,y) in enumerate(zip(m_mean, N)):
    # Printing the mean value inside the bin and the number of objects
    # computed using histogram and digitize routines
    if y>0:
        print(x,y, m[idx==i].mean(), (idx==i).sum(), m[idx==i].mean()/x-1)

Затем код возвращает меня:

12.09147 8398508 12.09147 8398508 0.0
12.290299 4963536 12.291113 4963536 6.61611557006836e-05
12.491035 2868949 12.49064 2868949 -3.170967102050781e-05
12.691388 1605604 12.690045 1605604 -0.00010579824447631836
12.889147 863974 12.889307 863974 1.239776611328125e-05
13.087788 442182 13.088266 442182 3.6597251892089844e-05
13.285536 208324 13.286537 208324 7.534027099609375e-05
13.484106 87673 13.48476 87673 4.851818084716797e-05
13.68377 32059 13.682073 32059 -0.0001240372657775879
13.867437 9686 13.87842 9686 0.0007919073104858398
14.170809 2213 14.0714035 2213 -0.007014811038970947
14.181818 352 14.269342 352 0.006171584129333496
14.27027 37 14.465543 37 0.013683915138244629
16.0 1 14.631467 1 -0.08553332090377808

Разница между этими двумя методами увеличивается с уменьшением количества объектов. Насколько я понимаю, они должны быть одинаковыми. Всегда. Я делаю что-то неправильно? К сожалению, я пока не смог воспроизвести это с синтетическими данными c. Тем не менее, описание моих данных:

stats.describe(m)                                                                                                                                              
Out[160]: DescribeResult(nobs=19483098, minmax=(12.0, 14.631467), mean=12.331255, variance=0.0899973, skewness=1.4405341148376465, kurtosis=2.2953028866460023)

Я был бы очень признателен за любую помощь, также с предложениями о том, как попытаться воспроизвести это с синтетическими c данными. Python 3. Numpy версия: 1.8.1.

...