Mercurial > gemma
diff pkg/common/nashsutcliffe.go @ 3091:cec9d4af5f03
Simplified and fixed Nash Sutcliffe calculation.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 23 Apr 2019 10:10:54 +0200 |
parents | 09d1ffce3d00 |
children | cb3360653652 |
line wrap: on
line diff
--- a/pkg/common/nashsutcliffe.go Sun Apr 21 19:11:38 2019 +0200 +++ b/pkg/common/nashsutcliffe.go Tue Apr 23 10:10:54 2019 +0200 @@ -14,6 +14,7 @@ package common import ( + "fmt" "sort" "time" ) @@ -78,32 +79,33 @@ return 0, false } -type NSMeasurement struct { - When time.Time - Predicted float64 - Observed float64 -} +func NashSutcliffe(predicted, observed []float64) float64 { -func NashSutcliffe(sample []NSMeasurement, from, to time.Time) (float64, int) { + if len(predicted) != len(observed) { + panic(fmt.Sprintf( + "NashSutcliffe: predicted and observed len differ: %d != %d", + len(predicted), + len(observed))) + } - if len(sample) == 0 { - return 0, 0 + if len(observed) == 0 { + return 0 } var mo float64 - for i := range sample { - mo += sample[i].Observed + for _, v := range observed { + mo += v } - mo /= float64(len(sample)) + mo /= float64(len(observed)) var num, denom float64 - for i := range sample { - d1 := sample[i].Predicted - sample[i].Observed + for i, o := range observed { + d1 := predicted[i] - o num += d1 * d1 - d2 := sample[i].Observed - mo + d2 := o - mo denom += d2 * d2 } - return 1 - num/denom, len(sample) + return 1 - num/denom }