change 2d cumulative calculation (#15346)

This commit is contained in:
Jeff Washington (jwash)
2021-02-16 14:24:45 -06:00
committed by GitHub
parent 708b8380b7
commit d83aeebcca

View File

@ -283,26 +283,20 @@ impl CumulativeOffsets {
pub fn from_raw_2d<T>(raw: &[Vec<Vec<T>>]) -> CumulativeOffsets { pub fn from_raw_2d<T>(raw: &[Vec<Vec<T>>]) -> CumulativeOffsets {
let mut total_count: usize = 0; let mut total_count: usize = 0;
let cumulative_offsets: Vec<CumulativeOffset> = raw let mut cumulative_offsets = Vec::with_capacity(0);
.iter() for (i, v_outer) in raw.iter().enumerate() {
.enumerate() for (j, v) in v_outer.iter().enumerate() {
.map(|(i, v)| {
v.iter()
.enumerate()
.filter_map(|(j, v)| {
let len = v.len(); let len = v.len();
if len > 0 { if len > 0 {
let result = CumulativeOffset::new(vec![i, j], total_count); if cumulative_offsets.is_empty() {
total_count += len; // the first inner, non-empty vector we find gives us an approximate rectangular shape
Some(result) cumulative_offsets = Vec::with_capacity(raw.len() * v_outer.len());
} else { }
None cumulative_offsets.push(CumulativeOffset::new(vec![i, j], total_count));
total_count += len;
}
}
} }
})
.collect::<Vec<_>>()
})
.flatten()
.collect();
Self { Self {
cumulative_offsets, cumulative_offsets,