1// Copyright ©2016 The Gonum Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// +build !amd64 noasm gccgo safe 6 7package f64 8 9import "math" 10 11// L1Norm is 12// for _, v := range x { 13// sum += math.Abs(v) 14// } 15// return sum 16func L1Norm(x []float64) (sum float64) { 17 for _, v := range x { 18 sum += math.Abs(v) 19 } 20 return sum 21} 22 23// L1NormInc is 24// for i := 0; i < n*incX; i += incX { 25// sum += math.Abs(x[i]) 26// } 27// return sum 28func L1NormInc(x []float64, n, incX int) (sum float64) { 29 for i := 0; i < n*incX; i += incX { 30 sum += math.Abs(x[i]) 31 } 32 return sum 33} 34 35// Add is 36// for i, v := range s { 37// dst[i] += v 38// } 39func Add(dst, s []float64) { 40 for i, v := range s { 41 dst[i] += v 42 } 43} 44 45// AddConst is 46// for i := range x { 47// x[i] += alpha 48// } 49func AddConst(alpha float64, x []float64) { 50 for i := range x { 51 x[i] += alpha 52 } 53} 54 55// CumSum is 56// if len(s) == 0 { 57// return dst 58// } 59// dst[0] = s[0] 60// for i, v := range s[1:] { 61// dst[i+1] = dst[i] + v 62// } 63// return dst 64func CumSum(dst, s []float64) []float64 { 65 if len(s) == 0 { 66 return dst 67 } 68 dst[0] = s[0] 69 for i, v := range s[1:] { 70 dst[i+1] = dst[i] + v 71 } 72 return dst 73} 74 75// CumProd is 76// if len(s) == 0 { 77// return dst 78// } 79// dst[0] = s[0] 80// for i, v := range s[1:] { 81// dst[i+1] = dst[i] * v 82// } 83// return dst 84func CumProd(dst, s []float64) []float64 { 85 if len(s) == 0 { 86 return dst 87 } 88 dst[0] = s[0] 89 for i, v := range s[1:] { 90 dst[i+1] = dst[i] * v 91 } 92 return dst 93} 94 95// Div is 96// for i, v := range s { 97// dst[i] /= v 98// } 99func Div(dst, s []float64) { 100 for i, v := range s { 101 dst[i] /= v 102 } 103} 104 105// DivTo is 106// for i, v := range s { 107// dst[i] = v / t[i] 108// } 109// return dst 110func DivTo(dst, s, t []float64) []float64 { 111 for i, v := range s { 112 dst[i] = v / t[i] 113 } 114 return dst 115} 116 117// L1Dist is 118// var norm float64 119// for i, v := range s { 120// norm += math.Abs(t[i] - v) 121// } 122// return norm 123func L1Dist(s, t []float64) float64 { 124 var norm float64 125 for i, v := range s { 126 norm += math.Abs(t[i] - v) 127 } 128 return norm 129} 130 131// LinfDist is 132// var norm float64 133// if len(s) == 0 { 134// return 0 135// } 136// norm = math.Abs(t[0] - s[0]) 137// for i, v := range s[1:] { 138// absDiff := math.Abs(t[i+1] - v) 139// if absDiff > norm || math.IsNaN(norm) { 140// norm = absDiff 141// } 142// } 143// return norm 144func LinfDist(s, t []float64) float64 { 145 var norm float64 146 if len(s) == 0 { 147 return 0 148 } 149 norm = math.Abs(t[0] - s[0]) 150 for i, v := range s[1:] { 151 absDiff := math.Abs(t[i+1] - v) 152 if absDiff > norm || math.IsNaN(norm) { 153 norm = absDiff 154 } 155 } 156 return norm 157} 158 159// Sum is 160// var sum float64 161// for i := range x { 162// sum += x[i] 163// } 164func Sum(x []float64) float64 { 165 var sum float64 166 for _, v := range x { 167 sum += v 168 } 169 return sum 170} 171