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  }