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