package main import ( "math" "math/rand" ) type Vector []float64 func MakeVector(n int) Vector { return make(Vector, n) } func MakeRandomVector(n int) Vector { V := make(Vector, n) for i := 0; i < n; i++ { for V[i] == 0 { V[i] = rand.NormFloat64() } } return V } func MakeDropoutVector(n int) Vector { V := make(Vector, n) for i := 0; i < n; i++ { if rand.Float64() >= Dropout { V[i] = 1 / (1 - Dropout) } } return V } func (A Vector) N() int { return len(A) } func (A Vector) Max() (int, float64) { id, max := 0, A[0] for i := 1; i < A.N(); i++ { if A[i] > max { id, max = i, A[i] } } return id, max } func (A Vector) Dot(B Vector) float64 { if A.N() != B.N() { panic("Incompatible Dimensions") } sum := 0. for i := 0; i < A.N(); i++ { sum += A[i] * B[i] } return sum } func (A Vector) Modulus() float64 { return math.Sqrt(A.Dot(A)) }