All Downloads are FREE. Search and download functionalities are using the official Maven repository.

breeze.signal.rootMeanSquare.scala Maven / Gradle / Ivy

There is a newer version: 1.0
Show newest version
package breeze.signal

import breeze.generic.UFunc
import breeze.linalg._
import breeze.numerics._
import breeze.macros.expand
import breeze.math.Complex
import breeze.stats.mean

/**Root mean square of a vector.
 * @author ktakagaki
 * @date 2/17/14.
 */
object rootMeanSquare extends UFunc {

  //ToDo: Expand to Int and Long once mean() is generified

  @expand
  @expand.valify
  implicit def rms1D[@expand.args(Float, Double) T] : rootMeanSquare.Impl[DenseVector[T], T] = {
    new rootMeanSquare.Impl[DenseVector[T], T] {
      def apply(v: DenseVector[T]): T = {
        val temp: T = mean( v.map( (elem: T) => elem * elem )  )
        sqrt( temp )
      }
    }
  }

  //temporary placeholder implementation until mean is fully generified
  implicit def rms1DInt : rootMeanSquare.Impl[DenseVector[Int], Double] = {
    new rootMeanSquare.Impl[DenseVector[Int], Double] {
      def apply(v: DenseVector[Int]): Double = sqrt(sum( convert(v, Double).map( elem => elem * elem ) ) / v.length.toDouble)
    }
  }
  implicit def rms1DLong : rootMeanSquare.Impl[DenseVector[Long], Double] = {
    new rootMeanSquare.Impl[DenseVector[Long], Double] {
      def apply(v: DenseVector[Long]): Double = sqrt(sum( convert(v, Double).map( elem => elem * elem ) ) / v.length.toDouble)
    }
  }



}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy