Дорогие все, что у меня есть данные, которые мне нужны, чтобы заметить что-то странное. Код следующий:
# 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.