use crate::lattice::PaddedTileLattice;
impl PaddedTileLattice<f32> {
pub fn sum(&self) -> f32 {
self.iter_logical().map(|(_, _, v)| v).sum()
}
pub fn max(&self) -> Option<f32> {
self.iter_logical()
.map(|(_, _, v)| v)
.fold(None, |acc, v| match acc {
None => Some(v),
Some(m) => Some(if v > m { v } else { m }),
})
}
pub fn min(&self) -> Option<f32> {
self.iter_logical()
.map(|(_, _, v)| v)
.fold(None, |acc, v| match acc {
None => Some(v),
Some(m) => Some(if v < m { v } else { m }),
})
}
pub fn mean(&self) -> Option<f32> {
if self.is_empty() {
return None;
}
Some(self.sum() / self.len() as f32)
}
pub fn row_sums(&self) -> Vec<f32> {
let mut out = vec![0.0f32; self.rows()];
for (row, _, v) in self.iter_logical() {
out[row] += v;
}
out
}
pub fn col_sums(&self) -> Vec<f32> {
let mut out = vec![0.0f32; self.cols()];
for (_, col, v) in self.iter_logical() {
out[col] += v;
}
out
}
}