pub struct ChunkedMetrics {
pub chunk_size: usize,
pub parallel_config: ParallelConfig,
}Expand description
Chunked metrics computation for memory efficiency
This struct provides methods for computing metrics on large datasets by processing the data in manageable chunks.
Fields§
§chunk_size: usizeSize of each data chunk
parallel_config: ParallelConfigConfiguration for parallel processing
Implementations§
Source§impl ChunkedMetrics
impl ChunkedMetrics
Sourcepub fn with_chunk_size(self, size: usize) -> Self
pub fn with_chunk_size(self, size: usize) -> Self
Set the chunk size
Sourcepub fn with_parallel_config(self, config: ParallelConfig) -> Self
pub fn with_parallel_config(self, config: ParallelConfig) -> Self
Set the parallel configuration
Sourcepub fn compute_streaming<T, S1, S2, M>(
&self,
y_true: &ArrayBase<S1, Ix1>,
y_pred: &ArrayBase<S2, Ix1>,
metric: &M,
) -> Result<f64>
pub fn compute_streaming<T, S1, S2, M>( &self, y_true: &ArrayBase<S1, Ix1>, y_pred: &ArrayBase<S2, Ix1>, metric: &M, ) -> Result<f64>
Compute a streaming metric on large arrays
§Arguments
y_true- True labels or valuesy_pred- Predicted labels or valuesmetric- The streaming metric to compute
§Returns
- The computed metric value
§Examples
use scirs2_core::ndarray::Array1;
use scirs2_metrics::optimization::memory::{ChunkedMetrics, StreamingMetric};
use scirs2_metrics::error::Result;
// Example streaming implementation of mean absolute error
struct StreamingMAE;
impl StreamingMetric<f64> for StreamingMAE {
type State = (f64, usize); // (sum_of_absolute_errors, count)
fn init_state(&self) -> Self::State {
(0.0, 0)
}
fn update_state(&self, state: &mut Self::State, batch_true: &[f64], batch_pred: &[f64]) -> Result<()> {
for (y_t, y_p) in batch_true.iter().zip(batch_pred.iter()) {
state.0 += (y_t - y_p).abs();
state.1 += 1;
}
Ok(())
}
fn finalize(&self, state: &Self::State) -> Result<f64> {
if state.1 == 0 {
return Err(scirs2_metrics::error::MetricsError::DivisionByZero);
}
Ok(state.0 / state.1 as f64)
}
}
// Generate some example data
let y_true = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0]);
let y_pred = Array1::from_vec(vec![1.2, 2.3, 2.9, 4.1, 5.2]);
// Compute MAE using chunked processing
let chunked = ChunkedMetrics::new().with_chunk_size(2);
let mae = chunked.compute_streaming(&y_true, &y_pred, &StreamingMAE).unwrap();
// The actual calculations in the streaming implementation may have
// different numeric precision due to chunking, so we just verify
// that we get a reasonable result instead of an exact value.
assert!(mae >= 0.1 && mae <= 0.5);Sourcepub fn compute_rowwise<T, R>(
&self,
data: &[T],
row_op: impl Fn(&[T]) -> Result<R>,
combine: impl Fn(&[R]) -> Result<R>,
) -> Result<R>
pub fn compute_rowwise<T, R>( &self, data: &[T], row_op: impl Fn(&[T]) -> Result<R>, combine: impl Fn(&[R]) -> Result<R>, ) -> Result<R>
Compute metrics on large 2D arrays with row-wise operations
This method processes a large 2D array in chunks of rows to reduce memory usage.
§Arguments
data- Input 1D arrayrow_op- Operation to perform on each chunk of datacombine- Function to combine results from all chunks
§Returns
- The computed result
Trait Implementations§
Source§impl Clone for ChunkedMetrics
impl Clone for ChunkedMetrics
Source§fn clone(&self) -> ChunkedMetrics
fn clone(&self) -> ChunkedMetrics
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ChunkedMetrics
impl Debug for ChunkedMetrics
Auto Trait Implementations§
impl Freeze for ChunkedMetrics
impl RefUnwindSafe for ChunkedMetrics
impl Send for ChunkedMetrics
impl Sync for ChunkedMetrics
impl Unpin for ChunkedMetrics
impl UnwindSafe for ChunkedMetrics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.