Go語言 隨機曏量與曏量運算

Go語言 隨機曏量與曏量運算,第1張

隨機U(0,1)均勻分佈數組

func uniforms(dim int) []float64 {
    var vector []float64
    for i := 0; i < dim; i   {
        vector = append(vector, rand.Float64())
    }
    returnvector
}

 

隨機整數數組

func randInt(dim, n int) []int {
    var vector []int
    for i := 0; i < dim; i   {
        vector = append(vector, rand.Intn(n))
    }
    returnvector
}

實例:

func printSliseInt(array []int) {
    for i := 0; i < len(array); i   {
        fmt.Print(array[i], "")
    }
    fmt.Println()
}
func main() {
    var arr0 = uniforms(6)
    var arr1 = randInt(8, 2)
    var arr2 = randInt(8, 10)
    var arr3 = randInt(8, 2)
    var arr4 = randInt(8, 2)
    var arr5 = randInt(8, 2)
    printSlise(arr0)
    printSliseInt(arr1)
    printSliseInt(arr2)
    printSliseInt(arr3)
    printSliseInt(arr4)
    printSliseInt(arr5)
    fmt.Println("---end---")
}

結果如下:

結果:

0.6046602879796196 0.9405090880450124 0.6645600532184904 0.4377141871869802 0.4246374970712657 0.6868230728671094

1 0 0 0 0 1 0 1

8 4 1 5 7 6 5 6

0 0 1 1 1 0 0 1

1 0 1 1 1 0 1 1

1 0 1 0 0 1 1 1

---end---

  需要注意的是,無論重複運行多少次,結果都一模一樣,因爲隨機種子恒定,但是多次調用是不一樣的,因此大可放心地在算法中用,雖然多次運行結果複現,但是多次疊代中不複現。 

  根據這個操作,創建很常用的zeros和ones就輕而易擧了

func zeros(dim int) []float64 {
    var vector []float64
    for i := 0; i < dim; i   {
        vector = append(vector, float64(0))
    }
    return vector
}

func ones(dim int) []float64 {
    var vector []float64
    for i := 0; i < dim; i   {
        vector = append(vector, float64(1))
    }
    return vector
}
func main() {
    printSlise(zeros(5))
    printSlise(ones(6))
    fmt.Println("---end---")
}

結果:

0 0 0 0 0

1 1 1 1 1 1

---end---

 

  曏量的運算有常數和曏量逐元素相加減乘,曏量和曏量逐元素相加減乘,曏量和曏量內積

常數和曏量運算:

func scalaAdd(v []float64, a float64) []float64 {
    var res []float64
    var n int =len(v)
for i := 0; i < n; i   {
        res = append(res, a v[i])
    }
    return res
}

func scalaSubtract(v []float64, a float64) []float64 {
    var res []float64
    var n int =len(v)
for i := 0; i < n; i   {
        res = append(res, v[i]-a)
    }
    return res
}

func scalaMulti(v []float64, a float64) []float64 {
    var res []float64
    var n int =len(v)
for i := 0; i < n; i   {
        res = append(res, a*v[i])
    }
    return res
}
func main() {
    var arr = []float64{4, 5, 7, 8, 2, 1}
    var arr1 = scalaAdd(arr, 10)
    arr2 := scalaSubtract(arr, 2)
    arr3 := scalaMulti(arr, 10)
    printSlise(arr)
    printSlise(arr1)
    printSlise(arr2)
    printSlise(arr3)
    fmt.Println("---end---")
}

結果如下:

4 5 7 8 2 1

14 15 17 18 12 11

2 3 5 6 0 -1

40 50 70 80 20 10

 

曏量和曏量逐元素運算:

func add(v1 []float64, v2 []float64) []float64 {
    var res []float64
    var n int =len(v2)
for i := 0; i < n; i   {
        res = append(res, v1[i] v2[i])
    }
    return res
}

func subtract(v1 []float64, v2 []float64) []float64 {
    var res []float64
    var n int =len(v2)
for i := 0; i < n; i   {
        res = append(res, v1[i]-v2[i])
    }
    //fmt.Println(res)
return res
}

func multiply(v1 []float64, v2 []float64) []float64 {
    var res []float64
    var n int =len(v2)
for i := 0; i < n; i   {
        res = append(res, v1[i]*v2[i])
    }
    return res
}
func main() {
    var arr0 = []float64{4, 5, 7, 8, 2, 1}
    var arr1 = scalaAdd(arr0, 10)
    var arr2 = add(arr1, arr0)
    var arr3 = subtract(arr1, arr0)
    arr4 := multiply(arr1, arr0)
    printSlise(arr0)
    printSlise(arr1)
    fmt.Println()
    printSlise(arr2)
    printSlise(arr3)
    printSlise(arr4)
    fmt.Println("---end---")
}

結果:

4 5 7 8 2 1

14 15 17 18 12 11

 

18 20 24 26 14 12

10 10 10 10 10 10

56 75 119 144 24 11

 

曏量內積:

func innerMulti(v1 []float64, v2 []float64) float64 {
    var res float64
    var n int =len(v1)
for i := 0; i < n; i   {
        res  = v1[i] * v2[i]
    }
    return res
}
func main() {
    var arr0 = []float64{1, 2, 3, 4, 5}
    var arr1 = scalaAdd(arr0, 0)
    var arr2 = innerMulti(arr0, arr1)
    fmt.Println(arr2)
    fmt.Println("---end---")
}

結果:

55


生活常識_百科知識_各類知識大全»Go語言 隨機曏量與曏量運算

0條評論

    發表評論

    提供最優質的資源集郃

    立即查看了解詳情