| 363 | } |
| 364 | |
| 365 | fn merge_batch(&mut self, states: &[ArrayRef]) -> Result<()> { |
| 366 | let counts = as_uint64_array(&states[0])?; |
| 367 | let means = as_float64_array(&states[1])?; |
| 368 | let m2s = as_float64_array(&states[2])?; |
| 369 | |
| 370 | for i in 0..counts.len() { |
| 371 | let c = counts.value(i); |
| 372 | if c == 0_u64 { |
| 373 | continue; |
| 374 | } |
| 375 | (self.count, self.mean, self.m2) = merge( |
| 376 | self.count, |
| 377 | self.mean, |
| 378 | self.m2, |
| 379 | c, |
| 380 | means.value(i), |
| 381 | m2s.value(i), |
| 382 | ) |
| 383 | } |
| 384 | Ok(()) |
| 385 | } |
| 386 | |
| 387 | fn evaluate(&mut self) -> Result<ScalarValue> { |
| 388 | let count = match self.stats_type { |