c# - 有效地将浮点数导出到 CSV 文件
问题描述
出于预计算的目的,我需要将大量(数千万)单精度浮点数存储在一个逗号分隔的文件中。
我的性能优先级按以下顺序排列:
- 阅读速度
- 文件大小
- 写入速度
现在我只是在写数字的字符串表示,这显然可以改进。有什么好的方法可以做到这一点?
解决方案
对于您的 #2 目标,您需要知道数字的哪些部分实际上很重要,以及是否存在相关性。它们的范围是否受到限制?测量它们的准确度是多少?所有六位数都重要吗?这是一个连续数字之间差异很小的时间序列吗?
该信息可用于压缩浮点值序列。限制它们值所代表的范围和精度。如果存在相关性,您可以获取连续值之间的差异并仅发送那些(第一个除外)。或者你可以有一个更复杂的模型来预测下一个给定序列的下一个数字,并发送每个数字的实际值和预测值之间的差异。
然后你可以尝试使用标准的无损压缩器压缩结果,例如 gzip、zlib、zstd、lz4 等。
这一切都会产生一个紧凑的二进制文件。如果您确实需要结果是可读的 .csv,您仍然可以限制精度并进行差异编码,以提供一些压缩。然后需要在另一端撤消差异编码。
推荐阅读
- android - 无法解析“CellIdentityLte”中的方法“getEarfcn”
- casting - 在 YouTube 上获取 Cast 按钮以获取自定义投射解决方案
- sql - 从 sql select 返回过滤结果
- java - 如何使用本机查询在 JPA 中执行嵌套联接
- swift - 截断日期的时间会保留一些时间分量
- java - 辅助功能服务 - performGlobalAction() 不起作用?
- c# - 不使用 Canvas 的 Unity 2D 拖放
- javascript - 如何从括号内百分比的字符串中提取数字
- python - python中的密集矩阵与稀疏矩阵
- css - 是否可以让导航标签 ul 标签使用导航标签网格?