mirror of
https://github.com/gonum/gonum.git
synced 2025-10-16 12:10:37 +08:00
Added cumprod function. Fixed error in CumSum
This commit is contained in:
19
sliceops.go
19
sliceops.go
@@ -98,7 +98,24 @@ func CumSum(receiver, s []float64) []float64 {
|
|||||||
}
|
}
|
||||||
receiver[0] = s[0]
|
receiver[0] = s[0]
|
||||||
for i := 1; i < len(s); i++ {
|
for i := 1; i < len(s); i++ {
|
||||||
receiver[i] += receiver[i-1] + s[i]
|
receiver[i] = receiver[i-1] + s[i]
|
||||||
|
}
|
||||||
|
return receiver
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finds the cumulative product of the first i elements in
|
||||||
|
// s and puts them in place into the ith element of the
|
||||||
|
// receiver. If the receiver is nil a new slice is created
|
||||||
|
func CumProd(receiver, s []float64) []float64 {
|
||||||
|
if receiver == nil {
|
||||||
|
receiver = make([]float64, len(s))
|
||||||
|
}
|
||||||
|
if len(s) == 0 {
|
||||||
|
return receiver[:0]
|
||||||
|
}
|
||||||
|
receiver[0] = s[0]
|
||||||
|
for i := 1; i < len(s); i++ {
|
||||||
|
receiver[i] = receiver[i-1] + s[i]
|
||||||
}
|
}
|
||||||
return receiver
|
return receiver
|
||||||
}
|
}
|
||||||
|
@@ -108,6 +108,10 @@ func TestCumSum(t *testing.T) {
|
|||||||
val := CumSum(nil, s)
|
val := CumSum(nil, s)
|
||||||
truth := []float64{3, 7, 8, 15, 20}
|
truth := []float64{3, 7, 8, 15, 20}
|
||||||
if !Eq(val, truth, 1E-15) {
|
if !Eq(val, truth, 1E-15) {
|
||||||
t.Errorf("Wrong cumsum returned. Expected %v, returned %v", truth, val)
|
t.Errorf("Wrong cumsum returned with nil receiver. Expected %v, returned %v", truth, val)
|
||||||
|
}
|
||||||
|
val = CumSum(val, s)
|
||||||
|
if !Eq(val, truth, 1E-15) {
|
||||||
|
t.Errorf("Wrong cumsum returned with non-nil receiver. Expected %v, returned %v", truth, val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user