1use ferray_core::Array;
4use ferray_core::dimension::{Dimension, Ix1};
5use ferray_core::dtype::Element;
6use ferray_core::error::FerrayResult;
7
8use crate::MaskedArray;
9
10impl<T, D> MaskedArray<T, D>
11where
12 T: Element + Copy,
13 D: Dimension,
14{
15 pub fn filled(&self, fill_value: T) -> FerrayResult<Array<T, D>> {
22 let data: Vec<T> = self
23 .data()
24 .iter()
25 .zip(self.mask().iter())
26 .map(|(v, m)| if *m { fill_value } else { *v })
27 .collect();
28 Array::from_vec(self.dim().clone(), data)
29 }
30
31 pub fn compressed(&self) -> FerrayResult<Array<T, Ix1>> {
39 let data: Vec<T> = self
40 .data()
41 .iter()
42 .zip(self.mask().iter())
43 .filter(|(_, m)| !**m)
44 .map(|(v, _)| *v)
45 .collect();
46 let len = data.len();
47 Array::from_vec(Ix1::new([len]), data)
48 }
49}