1 回答
TA贡献1811条经验 获得超6个赞
正如评论中所建议的那样,不要使用 XLS 格式,而是使用自定义的快速数据格式来读取和写入表格。
在最基本的情况下,只需将列数和行数写入二进制文件,然后一次性写入所有数据。这将非常快,我在这里创建了一个小示例,它只将 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)
}
}
- 1 回答
- 0 关注
- 104 浏览
添加回答
举报