mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-14 19:43:41 +02:00
Alternative way to initialize Obs to speed up error propagation
This commit is contained in:
parent
8ed1dac057
commit
369ee0a324
1 changed files with 18 additions and 7 deletions
|
@ -47,7 +47,7 @@ class Obs:
|
||||||
tau_exp_dict = {}
|
tau_exp_dict = {}
|
||||||
N_sigma_global = 1.0
|
N_sigma_global = 1.0
|
||||||
|
|
||||||
def __init__(self, samples, names):
|
def __init__(self, samples, names, **kwargs):
|
||||||
|
|
||||||
if len(samples) != len(names):
|
if len(samples) != len(names):
|
||||||
raise Exception('Length of samples and names incompatible.')
|
raise Exception('Length of samples and names incompatible.')
|
||||||
|
@ -62,10 +62,19 @@ class Obs:
|
||||||
self.shape = {}
|
self.shape = {}
|
||||||
self.r_values = {}
|
self.r_values = {}
|
||||||
self.deltas = {}
|
self.deltas = {}
|
||||||
for name, sample in sorted(zip(names, samples)):
|
|
||||||
self.shape[name] = np.size(sample)
|
if 'means' in kwargs:
|
||||||
self.r_values[name] = np.mean(sample)
|
if len(samples) != len(kwargs.get('means')):
|
||||||
self.deltas[name] = sample - self.r_values[name]
|
raise Exception('Length of samples and means incompatible.')
|
||||||
|
for name, sample, mean in sorted(zip(names, samples, kwargs.get('means'))):
|
||||||
|
self.shape[name] = np.size(sample)
|
||||||
|
self.r_values[name] = mean
|
||||||
|
self.deltas[name] = sample
|
||||||
|
else:
|
||||||
|
for name, sample in sorted(zip(names, samples)):
|
||||||
|
self.shape[name] = np.size(sample)
|
||||||
|
self.r_values[name] = np.mean(sample)
|
||||||
|
self.deltas[name] = sample - self.r_values[name]
|
||||||
|
|
||||||
self.N = sum(map(np.size, list(self.deltas.values())))
|
self.N = sum(map(np.size, list(self.deltas.values())))
|
||||||
|
|
||||||
|
@ -852,10 +861,12 @@ def derived_observable(func, data, **kwargs):
|
||||||
new_deltas[name] = new_deltas.get(name, 0) + deriv[i_val + j_obs] * obs.deltas[name]
|
new_deltas[name] = new_deltas.get(name, 0) + deriv[i_val + j_obs] * obs.deltas[name]
|
||||||
|
|
||||||
new_samples = []
|
new_samples = []
|
||||||
|
new_means = []
|
||||||
for name in new_names:
|
for name in new_names:
|
||||||
new_samples.append(new_deltas[name] + new_r_values[name][i_val])
|
new_samples.append(new_deltas[name])
|
||||||
|
new_means.append(new_r_values[name][i_val])
|
||||||
|
|
||||||
final_result[i_val] = Obs(new_samples, new_names)
|
final_result[i_val] = Obs(new_samples, new_names, means=new_means)
|
||||||
final_result[i_val].value = new_val
|
final_result[i_val].value = new_val
|
||||||
|
|
||||||
if multi == 0:
|
if multi == 0:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue