| // Copyright ©2016 The gonum Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //+build !amd64 noasm appengine |
| |
| package f64 |
| |
| import "math" |
| |
| // L1Norm is |
| // for _, v := range x { |
| // sum += math.Abs(v) |
| // } |
| // return sum |
| func L1Norm(x []float64) (sum float64) { |
| for _, v := range x { |
| sum += math.Abs(v) |
| } |
| return sum |
| } |
| |
| // L1NormInc is |
| // for i := 0; i < n*incX; i += incX { |
| // sum += math.Abs(x[i]) |
| // } |
| // return sum |
| func L1NormInc(x []float64, n, incX int) (sum float64) { |
| for i := 0; i < n*incX; i += incX { |
| sum += math.Abs(x[i]) |
| } |
| return sum |
| } |
| |
| // Add is |
| // for i, v := range s { |
| // dst[i] += v |
| // } |
| func Add(dst, s []float64) { |
| for i, v := range s { |
| dst[i] += v |
| } |
| } |
| |
| // AddConst is |
| // for i := range x { |
| // x[i] += alpha |
| // } |
| func AddConst(alpha float64, x []float64) { |
| for i := range x { |
| x[i] += alpha |
| } |
| } |
| |
| // Copy is |
| // for i := 0; i < n; i++ { |
| // dst[i*incDst] = src[i*incSrc] |
| // } |
| func Copy(n int, dst []float64, incDst int, src []float64, incSrc int) { |
| for i := 0; i < n; i++ { |
| dst[i*incDst] = src[i*incSrc] |
| } |
| } |
| |
| // CumSum is |
| // if len(s) == 0 { |
| // return dst |
| // } |
| // dst[0] = s[0] |
| // for i, v := range s[1:] { |
| // dst[i+1] = dst[i] + v |
| // } |
| // return dst |
| func CumSum(dst, s []float64) []float64 { |
| if len(s) == 0 { |
| return dst |
| } |
| dst[0] = s[0] |
| for i, v := range s[1:] { |
| dst[i+1] = dst[i] + v |
| } |
| return dst |
| } |
| |
| // CumProd is |
| // if len(s) == 0 { |
| // return dst |
| // } |
| // dst[0] = s[0] |
| // for i, v := range s[1:] { |
| // dst[i+1] = dst[i] * v |
| // } |
| // return dst |
| func CumProd(dst, s []float64) []float64 { |
| if len(s) == 0 { |
| return dst |
| } |
| dst[0] = s[0] |
| for i, v := range s[1:] { |
| dst[i+1] = dst[i] * v |
| } |
| return dst |
| } |
| |
| // Div is |
| // for i, v := range s { |
| // dst[i] /= v |
| // } |
| func Div(dst, s []float64) { |
| for i, v := range s { |
| dst[i] /= v |
| } |
| } |
| |
| // DivTo is |
| // for i, v := range s { |
| // dst[i] = v / t[i] |
| // } |
| // return dst |
| func DivTo(dst, s, t []float64) []float64 { |
| for i, v := range s { |
| dst[i] = v / t[i] |
| } |
| return dst |
| } |
| |
| // L1Dist is |
| // var norm float64 |
| // for i, v := range s { |
| // norm += math.Abs(t[i] - v) |
| // } |
| // return norm |
| func L1Dist(s, t []float64) float64 { |
| var norm float64 |
| for i, v := range s { |
| norm += math.Abs(t[i] - v) |
| } |
| return norm |
| } |
| |
| // LinfDist is |
| // var norm float64 |
| // if len(s) == 0 { |
| // return 0 |
| // } |
| // norm = math.Abs(t[0] - s[0]) |
| // for i, v := range s[1:] { |
| // absDiff := math.Abs(t[i+1] - v) |
| // if absDiff > norm || math.IsNaN(norm) { |
| // norm = absDiff |
| // } |
| // } |
| // return norm |
| func LinfDist(s, t []float64) float64 { |
| var norm float64 |
| if len(s) == 0 { |
| return 0 |
| } |
| norm = math.Abs(t[0] - s[0]) |
| for i, v := range s[1:] { |
| absDiff := math.Abs(t[i+1] - v) |
| if absDiff > norm || math.IsNaN(norm) { |
| norm = absDiff |
| } |
| } |
| return norm |
| } |