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

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

在 Go 中加載數(shù)據(jù)的最快方法

在 Go 中加載數(shù)據(jù)的最快方法

Go
牛魔王的故事 2023-03-21 17:21:57
我需要定期將300'000 rows x 78 columns數(shù)據(jù)加載到我的 Go 程序中。目前我使用(import github.com/360EntSecGroup-Skylar/excelize):xlsx, err := excelize.OpenFile("/media/test snaps.xlsm")if err != nil {    fmt.Println(err)    return}//read all rows into dfdf := xlsx.GetRows("data")在使用三星 960 EVO 系列 - M.2 內(nèi)置 SSD 的體面 PC 上大約需要4分鐘。有沒有更快的方法來加載這些數(shù)據(jù)?目前,讀取數(shù)據(jù)比處理數(shù)據(jù)花費的時間更多。我也對其他文件格式開放。
查看完整描述

1 回答

?
楊魅力

TA貢獻1811條經(jīng)驗 獲得超6個贊

正如評論中所建議的那樣,不要使用 XLS 格式,而是使用自定義的快速數(shù)據(jù)格式來讀取和寫入表格。

在最基本的情況下,只需將列數(shù)和行數(shù)寫入二進制文件,然后一次性寫入所有數(shù)據(jù)。這將非???,我在這里創(chuàng)建了一個小示例,它只將 300.000 x 40 float32 寫入文件并讀回它們。在我的機器上,這大約需要 400 毫秒和 250 毫秒(請注意,文件在寫入后在緩存中很熱,初始讀取可能需要更長的時間)。

package main


import (

    "encoding/binary"

    "os"


    "github.com/gonutz/tic"

)


func main() {

    const (

        rowCount = 300000

        colCount = 40

    )

    values := make([]float32, rowCount*colCount)

    func() {

        defer tic.Toc()("write")

        f, _ := os.Create("file")

        defer f.Close()

        binary.Write(f, binary.LittleEndian, int64(rowCount))

        binary.Write(f, binary.LittleEndian, int64(colCount))

        check(binary.Write(f, binary.LittleEndian, values))

    }()

    func() {

        defer tic.Toc()("read")

        f, _ := os.Open("file")

        defer f.Close()

        var rows, cols int64

        binary.Read(f, binary.LittleEndian, &rows)

        binary.Read(f, binary.LittleEndian, &cols)

        vals := make([]float32, rows*cols)

        check(binary.Read(f, binary.LittleEndian, vals))

    }()

}


func check(err error) {

    if err != nil {

        panic(err)

    }

}


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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