mirror of
https://github.com/gonum/gonum.git
synced 2025-10-09 00:50:16 +08:00
75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
// Copyright ©2016 The Gonum Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package distmv
|
|
|
|
import (
|
|
"log"
|
|
"testing"
|
|
|
|
"golang.org/x/exp/rand"
|
|
|
|
"gonum.org/v1/gonum/mat"
|
|
)
|
|
|
|
func BenchmarkMarginalNormal10(b *testing.B) {
|
|
sz := 10
|
|
rnd := rand.New(rand.NewSource(1))
|
|
normal := randomNormal(sz, rnd)
|
|
_ = normal.CovarianceMatrix(nil) // pre-compute sigma
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
marg, ok := normal.MarginalNormal([]int{1}, nil)
|
|
if !ok {
|
|
b.Error("bad test")
|
|
}
|
|
_ = marg
|
|
}
|
|
}
|
|
|
|
func BenchmarkMarginalNormalReset10(b *testing.B) {
|
|
sz := 10
|
|
rnd := rand.New(rand.NewSource(1))
|
|
normal := randomNormal(sz, rnd)
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
marg, ok := normal.MarginalNormal([]int{1}, nil)
|
|
if !ok {
|
|
b.Error("bad test")
|
|
}
|
|
_ = marg
|
|
}
|
|
}
|
|
|
|
func BenchmarkMarginalNormalSingle10(b *testing.B) {
|
|
sz := 10
|
|
rnd := rand.New(rand.NewSource(1))
|
|
normal := randomNormal(sz, rnd)
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
marg := normal.MarginalNormalSingle(1, nil)
|
|
_ = marg
|
|
}
|
|
}
|
|
|
|
func randomNormal(sz int, rnd *rand.Rand) *Normal {
|
|
mu := make([]float64, sz)
|
|
for i := range mu {
|
|
mu[i] = rnd.Float64()
|
|
}
|
|
data := make([]float64, sz*sz)
|
|
for i := range data {
|
|
data[i] = rnd.Float64()
|
|
}
|
|
dM := mat.NewDense(sz, sz, data)
|
|
var sigma mat.SymDense
|
|
sigma.SymOuterK(1, dM)
|
|
|
|
normal, ok := NewNormal(mu, &sigma, nil)
|
|
if !ok {
|
|
log.Fatal("bad test, not pos def")
|
|
}
|
|
return normal
|
|
}
|