第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GO:如何分配 2 x 2 可變大小數(shù)組中的所有元素?

GO:如何分配 2 x 2 可變大小數(shù)組中的所有元素?

Go
滄海一幻覺 2021-12-20 17:10:37
我在使用 GO 用文本文件中的矩陣填充二維數(shù)組時遇到問題。我的主要問題是創(chuàng)建一個二維數(shù)組,因為我必須計算數(shù)組的維度,而 GO 似乎不接受數(shù)組維度中的 VAR:nb_lines = number of line of the arraynb_col = number of columns of the array// read matrix from filewhole_file,_ := ioutil.ReadFile("test2.txt")// get each line of the file in tab_whole_filetab_whole_file := strings.Split(string(whole_file), "\n")// first line of the tabletab_first_line := strings.Split(tab_whole_file[0], "\t")nb_col := len(tab_first_line)nb_lines := len(tab_whole_file) - 1// at this point I tried to build a array to contain the matrix values from the texte filevar columns [nb_lines][nb_col]float64 // does not workcolumns := make([][]float64, nb_lines, nb_col) // does not workcolumns := make([nb_lines][nb_col]float64) // does not workcolumns := [nb_lines][nb_col]float64{} // does not workcolumns := [][]float64{} // panic: runtime error: index out of rangefor i := 0; i < nb_lines ; i++ { // for each line of the table from text file    line := strings.Split(tab_whole_file[0], "\t") // split one line to get each table values    for j := 1; j < len(line) ; j++ {        columns[i][j], _  = strconv.ParseFloat(line[j], 64) // assign each value to the table columns[i][j]    }}
查看完整描述

3 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗 獲得超8個贊

例如,


package main


import (

    "bytes"

    "fmt"

    "io/ioutil"

    "strconv"

)


func loadMatrix(filename string) ([][]float64, error) {

    var m [][]float64

    data, err := ioutil.ReadFile(filename)

    if err != nil {

        return nil, err

    }


    rows := bytes.Split(data, []byte{'\n'})

    for r := len(rows) - 1; r >= 0; r-- {

        if len(rows[r]) != 0 {

            break

        }

        rows = rows[:len(rows)-1]

    }

    m = make([][]float64, len(rows))


    nCols := 0

    for r, row := range rows {

        cols := bytes.Split(row, []byte{'\t'})

        if r == 0 {

            nCols = len(cols)

        }

        m[r] = make([]float64, nCols)

        for c, col := range cols {

            if c < nCols && len(col) > 0 {

                e, err := strconv.ParseFloat(string(col), 64)

                if err != nil {

                    return nil, err

                }

                m[r][c] = e

            }

        }

    }

    return m, nil

}


func main() {

    filename := "matrix.tsv"

    m, err := loadMatrix(filename)

    if err != nil {

        fmt.Println(err)

        return

    }

    fmt.Println("Matrix:")

    fmt.Println(m)


    fmt.Println("\nBy [row,column]:")

    for r := range m {

        for c := range m[0] {

            fmt.Printf("[%d,%d] %5v  ", r, c, m[r][c])

        }

        fmt.Println()

    }


    fmt.Println("\nBy [column,row]:")

    for c := range m[0] {

        for r := range m {

            fmt.Printf("[%d,%d] %5v  ", c, r, m[r][c])

        }

        fmt.Println()

    }

}

輸出:


$ cat matrix.tsv

3.14    1.59    2.7 1.8

42


$ go run matrix.go

Matrix:

[[3.14 1.59 2.7 1.8] [42 0 0 0]]


By [row,column]:

[0,0]  3.14  [0,1]  1.59  [0,2]   2.7  [0,3]   1.8  

[1,0]    42  [1,1]     0  [1,2]     0  [1,3]     0  


By [column,row]:

[0,0]  3.14  [0,1]    42  

[1,0]  1.59  [1,1]     0  

[2,0]   2.7  [2,1]     0  

[3,0]   1.8  [3,1]     0  

$


查看完整回答
反對 回復(fù) 2021-12-20
?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊

float64Go中的矩陣被聲明為[][]float64


var matrix [][]float64

您可以使用:=運算符來初始化矩陣并自動聲明類型


matrix := [][]float64{}

請注意,上面這行不是簡單的聲明,而是用于創(chuàng)建新的空切片的語法


// creates an empty slice of ints

x := []int{} 

// creates a slice of ints

x := []int{1, 2, 3, 4} 

的使用[]float64{}結(jié)合了定義和分配。注意下面兩行是不同的


// creates a slice of 4 ints

x := []int{1, 2, 3, 4} 

// creates an array of 4 ints

x := [4]int{1, 2, 3, 4} 

切片可以調(diào)整大小,數(shù)組具有固定大小。


回到你的問題,這是一個演示如何創(chuàng)建矩陣float64并將新行附加到矩陣的示例。


package main


import "fmt"


func main() {

    matrix := [][]float64{}

    matrix = append(matrix, []float64{1.0, 2.0, 3.0})

    matrix = append(matrix, []float64{1.1, 2.1, 3.1})

    fmt.Println(matrix)

}

您可以從此示例開始并更新您的腳本。


查看完整回答
反對 回復(fù) 2021-12-20
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊

我對我的程序做了很少的修改,這是一個“幾乎”的工作示例......不是很優(yōu)雅;)矩陣中仍然存在一個問題:矩陣的第一列對應(yīng)于文件的第一行,所以我不可以訪問列:(


func main() {


    matrix := [][]float64{} // matrix corresponding to the text file


    // Open the file.

    whole_file,_ := ioutil.ReadFile("test2.tsv")

    // mesasure the size of the table

    tab_whole_file := strings.Split(string(whole_file), "\n")

    tab_first_line := strings.Split(tab_whole_file[0], "\t")

    nb_col := len(tab_first_line)

    nb_lines := len(tab_whole_file) - 1 

// I dont know why this number is longer than I expected so I have to substract 1



    for i := 0; i < nb_lines ; i++ {

      numbers := []float64{} // temp array

      line := strings.Split(tab_whole_file[i], "\t")

      for j := 1; j < nb_col ; j++ { // 1 instead of 0 because I dont want the first column of row names and I cant store it in a float array

        if nb, err := strconv.ParseFloat(line[j], 64); err == nil {

          numbers = append(numbers,nb) // not very elegant/efficient temporary array

        }

      }

      matrix = append(matrix, numbers)

    }

}


查看完整回答
反對 回復(fù) 2021-12-20
  • 3 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號