[][src]Trait rstats::Vecf64

pub trait Vecf64 {
    fn smult(self, s: f64) -> Vec<f64>;
fn sadd(self, s: f64) -> Vec<f64>;
fn dotp(self, v: &[f64]) -> f64;
fn cosine(self, _v: &[f64]) -> f64;
fn vsub(self, v: &[f64]) -> Vec<f64>;
fn vadd(self, v: &[f64]) -> Vec<f64>;
fn vmag(self) -> f64;
fn vmagsq(self) -> f64;
fn vdist(self, v: &[f64]) -> f64;
fn vdistu8(self, v: &[u8]) -> f64;
fn vunit(self) -> Vec<f64>;
fn varea(self, v: &[f64]) -> f64;
fn varc(self, v: &[f64]) -> f64;
fn correlation(self, _v: &[f64]) -> f64;
fn kendalcorr(self, _v: &[f64]) -> f64;
fn spearmancorr(self, _v: &[f64]) -> f64;
fn kazutsugi(self) -> f64;
fn autocorr(self) -> f64;
fn minmax(self) -> (f64, usize, f64, usize);
fn lintrans(self) -> Vec<f64>;
fn sortf(self) -> Vec<f64>;
fn mergerank(self) -> Vec<usize>;
fn mergesort(self, i: usize, n: usize) -> Vec<usize>; }

Vector algebra on one or two vectors.

Required methods

fn smult(self, s: f64) -> Vec<f64>

Scalar multiplication with a vector

fn sadd(self, s: f64) -> Vec<f64>

Scalar addition to vector

fn dotp(self, v: &[f64]) -> f64

Scalar product of two vectors

fn cosine(self, _v: &[f64]) -> f64

Cosine = a.dotp(b)/(a.vmag*b.vmag)

fn vsub(self, v: &[f64]) -> Vec<f64>

Vector subtraction

fn vadd(self, v: &[f64]) -> Vec<f64>

Vector addition

fn vmag(self) -> f64

Vector magnitude

fn vmagsq(self) -> f64

Vector magnitude squared

fn vdist(self, v: &[f64]) -> f64

Euclidian distance between two points

fn vdistu8(self, v: &[u8]) -> f64

fn vunit(self) -> Vec<f64>

Unit vector

fn varea(self, v: &[f64]) -> f64

Area of parallelogram between two vectors (magnitude of cross product)

fn varc(self, v: &[f64]) -> f64

Area proportional to the swept arc

fn correlation(self, _v: &[f64]) -> f64

Correlation

fn kendalcorr(self, _v: &[f64]) -> f64

Kendall's tau-b (rank order) correlation

fn spearmancorr(self, _v: &[f64]) -> f64

Spearman's rho (rank differences) correlation

fn kazutsugi(self) -> f64

Kazutsugi Spearman's corelation against just five distances (to outcomes classes)

fn autocorr(self) -> f64

Autocorrelation

fn minmax(self) -> (f64, usize, f64, usize)

Minimum, minimum's index, maximum, maximum's index.

fn lintrans(self) -> Vec<f64>

Linear transformation to [0,1]

fn sortf(self) -> Vec<f64>

Sorted vector

fn mergerank(self) -> Vec<usize>

Reursive merge sort building ranks in n*log(n)

fn mergesort(self, i: usize, n: usize) -> Vec<usize>

Immutable merge sort, makes an index

Loading content...

Implementations on Foreign Types

impl<'_> Vecf64 for &'_ [f64][src]

fn smult(self, s: f64) -> Vec<f64>[src]

Scalar multiplication of a vector, creates new vec

fn sadd(self, s: f64) -> Vec<f64>[src]

Scalar addition to a vector, creates new vec

fn dotp(self, v: &[f64]) -> f64[src]

Scalar product of two f64 slices.
Must be of the same length - no error checking (for speed)

fn cosine(self, v: &[f64]) -> f64[src]

Cosine of an angle between two vectors.

Example

use rstats::Vecf64;
let v1 = vec![1_f64,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.];
let v2 = vec![14_f64,1.,13.,2.,12.,3.,11.,4.,10.,5.,9.,6.,8.,7.];
assert_eq!(v1.cosine(&v2),0.7517241379310344);

fn vsub(self, v: &[f64]) -> Vec<f64>[src]

Vector subtraction, creates a new Vec result

fn vadd(self, v: &[f64]) -> Vec<f64>[src]

Vector addition, creates a new Vec result

fn vdist(self, v: &[f64]) -> f64[src]

Euclidian distance between two n dimensional points (vectors).
Slightly faster than vsub followed by vmag, as both are done in one loop

fn vdistu8(self, v: &[u8]) -> f64[src]

Euclidian distance, same as vdist but the argument is of &u8 type

fn vmag(self) -> f64[src]

Vector magnitude

fn vmagsq(self) -> f64[src]

Vector magnitude squared

fn vunit(self) -> Vec<f64>[src]

Unit vector - creates a new one

fn varea(self, v: &[f64]) -> f64[src]

Area of a parallelogram between two vectors. Same as the magnitude of their cross product. Attains maximum |a|.|b| when the vectors are othogonal.

fn varc(self, v: &[f64]) -> f64[src]

Area proportional to the swept arc up to angle theta. Attains maximum of 2|a||b| when the vectors have opposite orientations. This is really |a||b|(1-cos(theta))

fn correlation(self, v: &[f64]) -> f64[src]

Pearson's correlation coefficient of a sample of two f64 variables.

Example

use rstats::Vecf64;
let v1 = vec![1_f64,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.];
let v2 = vec![14_f64,1.,13.,2.,12.,3.,11.,4.,10.,5.,9.,6.,8.,7.];
assert_eq!(v1.correlation(&v2),-0.1076923076923077);

fn kendalcorr(self, v: &[f64]) -> f64[src]

Kendall Tau-B correlation coefficient of a sample of two f64 variables. Defined by: tau = (conc - disc) / sqrt((conc + disc + tiesx) * (conc + disc + tiesy)) This is the simplest implementation with no sorting.

Example

use rstats::Vecf64;
let v1 = vec![1_f64,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.];
let v2 = vec![14_f64,1.,13.,2.,12.,3.,11.,4.,10.,5.,9.,6.,8.,7.];
assert_eq!(v1.kendalcorr(&v2),-0.07692307692307693);

fn spearmancorr(self, v: &[f64]) -> f64[src]

Spearman rho correlation coefficient of two f64 variables. This is the simplest implementation with no sorting.

Example

use rstats::Vecf64;
let v1 = vec![1_f64,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.];
let v2 = vec![14_f64,1.,13.,2.,12.,3.,11.,4.,10.,5.,9.,6.,8.,7.];
assert_eq!(v1.spearmancorr(&v2),-0.1076923076923077);

fn kazutsugi(self) -> f64[src]

Spearman correlation of five distances against Kazutsugi discrete outcomes [0.00,0.25,0.50,0.75,1.00], ranked as [4,3,2,1,0] (the order is swapped to penalise distances). The result is in the range [0,1], rounded to five decimal places.

Example

use rstats::Vecf64;
let v1:Vec<f64> = vec![4.,1.,2.,0.,3.];
assert_eq!(v1.kazutsugi(),0.3);

fn autocorr(self) -> f64[src]

(Auto)correlation coefficient of pairs of successive values of (time series) f64 variable.

Example

use rstats::Vecf64;
let v1 = vec![1_f64,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.];
assert_eq!(v1.autocorr(),0.9984603532054123_f64);

fn minmax(self) -> (f64, usize, f64, usize)[src]

Finds minimum, minimum's index, maximum, maximum's index of &f64 Here self is usually some data, rather than a vector

fn lintrans(self) -> Vec<f64>[src]

Linear transform to interval [0,1]

fn sortf(self) -> Vec<f64>[src]

Make sorted vector

fn mergerank(self) -> Vec<usize>[src]

Reverses the sort index, thus ranking self with only n*(log(n)+1) complexity.

fn mergesort(self, i: usize, n: usize) -> Vec<usize>[src]

Recursive non-destructive merge sort. Indexes self in sort-order from i to i+n (instead of mutating self as the standard Rust sort does).

Loading content...

Implementors

Loading content...