MCPcopy Create free account
hub / github.com/SingleRust/SingleRust / normalize_per_bin

Function normalize_per_bin

src/shared/processing/mod.rs:138–200  ·  view source on GitHub ↗
(
    log_means: &[f64],
    log_dispersions: &[f64],
    n_bins: usize,
)

Source from the content-addressed store, hash-verified

136
137#[allow(dead_code)]
138fn normalize_per_bin(
139 log_means: &[f64],
140 log_dispersions: &[f64],
141 n_bins: usize,
142) -> anyhow::Result<Vec<f64>> {
143 let min_mean = log_means.iter().fold(f64::INFINITY, |a, &b| a.min(b));
144 let max_mean = log_means.iter().fold(f64::NEG_INFINITY, |a, &b| a.max(b));
145 let bin_width = (max_mean - min_mean) / n_bins as f64;
146
147 let mut norm_dispersions = vec![0.0; log_means.len()];
148 let mut bin_counts = vec![0; n_bins];
149 let mut bin_disp_means = vec![0.0; n_bins];
150 let mut bin_disp_stds = vec![0.0; n_bins];
151
152 for i in 0..log_means.len() {
153 let bin_idx = if log_means[i] == max_mean {
154 n_bins - 1
155 } else {
156 ((log_means[i] - min_mean) / bin_width) as usize
157 };
158
159 bin_counts[bin_idx] += 1;
160 bin_disp_means[bin_idx] += log_dispersions[i];
161 }
162
163 for i in 0..n_bins {
164 if bin_counts[i] > 0 {
165 bin_disp_means[i] /= bin_counts[i] as f64;
166 }
167 }
168
169 for i in 0..log_means.len() {
170 let bin_idx = if log_means[i] == max_mean {
171 n_bins - 1
172 } else {
173 ((log_means[i] - min_mean) / bin_width) as usize
174 };
175 if bin_counts[bin_idx] > 1 {
176 bin_disp_stds[bin_idx] += (log_dispersions[i] - bin_disp_means[bin_idx]).powi(2);
177 }
178 }
179
180 for i in 0..n_bins {
181 if bin_counts[i] > 1 {
182 bin_disp_stds[i] = (bin_disp_stds[i] / (bin_counts[i] - 1) as f64).sqrt();
183 }
184 }
185
186 for i in 0..log_means.len() {
187 let bin_idx = if log_means[i] == max_mean {
188 n_bins - 1
189 } else {
190 ((log_means[i] - min_mean) / bin_width) as usize
191 };
192
193 if bin_disp_stds[bin_idx] > 0.0 {
194 norm_dispersions[i] =
195 (log_dispersions[i] - bin_disp_means[bin_idx]) / bin_disp_stds[bin_idx];

Callers 1

_normalize_by_batchFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected