在Golang中随机生成矩阵

时间:2017-05-22 14:58:37

标签: matrix go random

我目前正在编写一个程序,我想随机生成一个矩阵。

目前,我按照以下方式预先设置了值:

    m1 := [3][3]int{
    [3]int{1, 1, 1},
    [3]int{4, 1, 7},
    [3]int{1, 65, 1},
}

但是我希望输入的值在1-100范围内随机生成。

import "math/rand"

我正在导入上面的库并尝试使用它。

我试图让这个工作起作用,但似乎无法取得任何进展。

    m1 := [3][3]int{
    [3]int{rand.Intn, 1, 1},
    [3]int{4, 1, 7},
    [3]int{1, 65, 1},
}

我试图用上面的解决方案完成它,使第一个数字随机,但是我得到以下错误。

cannot use rand.Intn (type func(int) int) as type int in array or slice literal

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

直接答案是openblas-android-arm.jar生成0到rand.Intn()之间的随机整数,其中n是此方法的参数。您得到的错误是编译器抱怨您尝试使用需要两个n的函数初始化int值并返回一个 - 您正在尝试将函数分配给{{ 1}}。所以正确的调用就像int一样,会给你一个介于0到100之间的随机数。

但是,为什么这样呢?为什么不用随机数动态初始化数组:

int

答案 1 :(得分:0)

上面回答了你的问题,这是一个扩展,

虽然rand.Int(10)总是给你1,因为它没有播种, 您可以添加此函数以在每次运行程序时获取随机值

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func init() {
    rand.Seed(time.Now().UnixNano())
//we are seeding the rand variable with present time 
//so that we would get different output each time
}

func main() {
    randMatrix := make([][]int, 3) 
// we have created a slice with length 3 
//which can hold type []int, these can be of different length
    for i := 0; i < 3; i++ {
        randMatrix[i] = make([]int, 3) 
// we are creating a slice which can hold type int
    }
    generate(randMatrix)
    fmt.Println(randMatrix)
}

func generate(randMatrix [][]int) {
    for i, innerArray := range randMatrix {
        for j := range innerArray {
            randMatrix[i][j] = rand.Intn(100)
//looping over each element of array and assigning it a random variable
        }
    }
}

此代码生成随机矩阵,低于100,同时您还可以使用标志用于将来的任何使用并概括值,

import  "flag"

var outerDim, innerDim, limit *int

func main() {
    outerDim = flag.Int("outerDim", 3, "Outer dimension of the matrix")
    innerDim = flag.Int("innerDim", 3, "inner dimenstion of the matrix")
    limit = flag.Int("limit", 100, "matrix values are limited specified value")
    flag.Parse()
    randMatrix := make([][]int, *outerDim)
    for i := 0; i < *outerDim; i++ {
        randMatrix[i] = make([]int, *innerDim)
    }
    generate(randMatrix)
    printMatrix(randMatrix)
}

func generate(randMatrix [][]int) {
    for i, innerArray := range randMatrix {
        for j := range innerArray {
            randMatrix[i][j] = rand.Intn(*limit)
        }
    }
}

func printMatrix(randMatrix [][]int) {
//looping over 2D slice and extracting 1D slice to val
    for _, val := range randMatrix {
        fmt.Println(val)// printing each slice
    }
}

我们可以修改上面的printMatrix函数,循环遍历每个整数,然后使用fmt.Printf()将其格式化,但是当我们不知道限制的长度时,这会使事情变得复杂......