telium 0.1.2

Eventually a suite a libraries for medical science
Documentation
extern crate num;
use self::num::Complex;

use std::f64::consts::PI;
use std::iter::Iterator;

/// A Discrete Fourier Transfom using a slow algorithm
pub fn dft(x: Vec<f64>) -> Vec<Complex<f64>> {
    let len = x.len();
    let mut ft: Vec<Complex<f64>> = Vec::with_capacity(len);
    for k in 0..len {
        ft.push(x.iter()
                 .enumerate()
                 .map(|(n, z): (usize, &f64)| {
                     (Complex::i() * PI * -2f64 * k as f64 * n as f64 / len as f64).exp() *
                     Complex::new(*z, 0f64)
                 })
                 .fold(Complex::new(0f64, 0f64), |sum, t| sum + t))
    }
    ft
}