Path: blob/main/crates/polars-ops/src/chunked_array/cov.rs
6939 views
use num_traits::AsPrimitive;1use polars_compute::moment::{CovState, PearsonState};2use polars_core::prelude::*;3use polars_core::utils::align_chunks_binary;45/// Compute the covariance between two columns.6pub fn cov<T>(a: &ChunkedArray<T>, b: &ChunkedArray<T>, ddof: u8) -> Option<f64>7where8T: PolarsNumericType,9T::Native: AsPrimitive<f64>,10ChunkedArray<T>: ChunkVar,11{12let (a, b) = align_chunks_binary(a, b);13let mut out = CovState::default();14for (a, b) in a.downcast_iter().zip(b.downcast_iter()) {15out.combine(&polars_compute::moment::cov(a, b))16}17out.finalize(ddof)18}1920/// Compute the pearson correlation between two columns.21pub fn pearson_corr<T>(a: &ChunkedArray<T>, b: &ChunkedArray<T>) -> Option<f64>22where23T: PolarsNumericType,24T::Native: AsPrimitive<f64>,25ChunkedArray<T>: ChunkVar,26{27let (a, b) = align_chunks_binary(a, b);28let mut out = PearsonState::default();29for (a, b) in a.downcast_iter().zip(b.downcast_iter()) {30out.combine(&polars_compute::moment::pearson_corr(a, b))31}32Some(out.finalize())33}343536