numpy.savetxt()输出非常大的文件

sam*_*fer 4 python arrays file-io numpy

我使用numpy.savetxt()将一个numpy数组写入csv文件,但生成的文件非常大.例如,如果我创建一个零数组:

import numpy

test = numpy.zeros((10000,10000), dtype=numpy.float32)
numpy.savetxt('C:/datatest.csv',test,delimiter=',')
Run Code Online (Sandbox Code Playgroud)

我希望该文件大约10,000*10,000*4字节(400 MB).(这也是test.nbytes回报).但是,该文件大2.3 GB.是否有大文件大小的原因?我查看了numpy文档,在写入文件时似乎没有办法指定变量类型.我尝试了其他文件类型/分隔符,但得到了相同的结果.

Ste*_*ski 7

本机数据类型的大小与数据类型的字符串表示形式的大小不同.

numpy.savetxt有一个fmt默认的参数'%.18e',它将每个零格式化为0.000000000000000000e+00.这是每个项目24个字符加上一个分隔符.

要获得较小的文件,您可以更改格式(注意丢失有效数字)或使用numpy.save二进制numpy.savez保存或保存为压缩存档.

  • 值得强调的是,无论哪种格式,`savetxt`都以* string *形式保存数据。OP似乎认为每个float32值将以某种二进制格式保存为4个字节,但事实并非如此。 (2认同)