vector.go 893 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package main
  2. import (
  3. "math"
  4. "math/rand"
  5. )
  6. type Vector []float64
  7. func MakeVector(n int) Vector {
  8. return make(Vector, n)
  9. }
  10. func MakeRandomVector(n int) Vector {
  11. V := make(Vector, n)
  12. for i := 0; i < n; i++ {
  13. for V[i] == 0 {
  14. V[i] = rand.NormFloat64()
  15. }
  16. }
  17. return V
  18. }
  19. func MakeDropoutVector(n int) Vector {
  20. V := make(Vector, n)
  21. for i := 0; i < n; i++ {
  22. if rand.Float64() >= Dropout {
  23. V[i] = 1 / (1 - Dropout)
  24. }
  25. }
  26. return V
  27. }
  28. func (A Vector) N() int {
  29. return len(A)
  30. }
  31. func (A Vector) Max() (int, float64) {
  32. id, max := 0, A[0]
  33. for i := 1; i < A.N(); i++ {
  34. if A[i] > max {
  35. id, max = i, A[i]
  36. }
  37. }
  38. return id, max
  39. }
  40. func (A Vector) Dot(B Vector) float64 {
  41. if A.N() != B.N() {
  42. panic("Incompatible Dimensions")
  43. }
  44. sum := 0.
  45. for i := 0; i < A.N(); i++ {
  46. sum += A[i] * B[i]
  47. }
  48. return sum
  49. }
  50. func (A Vector) Modulus() float64 {
  51. return math.Sqrt(A.Dot(A))
  52. }