redstone_ml/ndarray/
astype.rs

1use crate::dtype::NumericDataType;
2use crate::{Constructors, NdArray, StridedMemory};
3use num::NumCast;
4use crate::ndarray::flags::NdArrayFlags;
5
6impl<T: NumericDataType> NdArray<'_, T> {
7    pub fn astype<'b, F: NumericDataType>(&self) -> NdArray<'b, F>
8    {
9        let mut data = vec![F::default(); self.size()];
10
11        for (dst, src) in data.iter_mut().zip(self.flatiter()) {
12            *dst = NumCast::from(src).expect("astype conversion failed");
13        }
14        
15        unsafe { NdArray::from_contiguous_owned_buffer(self.shape().to_vec(), data) }
16    }
17
18    pub(crate) unsafe fn lifetime_cast(&self) -> NdArray<'static, T> {
19        NdArray {
20            ptr: self.ptr,
21            len: self.len,
22            capacity: 0,
23
24            shape: self.shape.clone(),
25            stride: self.stride.clone(),
26            flags: self.flags - NdArrayFlags::UserCreated,
27            
28            _marker: Default::default(),
29        }
30    }
31}