- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以指导我在读/写速度、性能、重量(文件大小)方面找到最佳存储格式,以便将重矩阵(具有恒定精度的浮点数)存储到文件中(到 HDD)。
我一直在使用 ASCII、文本和二进制格式。假设对于相同的矩阵大小(例如 10000x10000x200)和数字精度(例如,5 位有效数字),我发现二进制格式一般给出了最好的结果,然后是 ASCII 和文本在访问/写入速度和权重方面一般(我没有做过任何实际测试)。
话虽如此,在我的情况下,是否有比二进制更好的标准数据存储格式?如果没有,有什么方法可以优化我的数据结构以在保存/读取时获得更好的性能?
附注。如果可以帮助获得更好的结果,我可以使用 C、C++ 或 Matlab(对我来说使用哪一种并不重要)。
最佳答案
二进制一般会快得多。如果您使用浮点数,则每个数字使用 4 个字节,而不是数字的每个字符 1 个字节 - 因此数字 5.34182 是 4 个字节,而不是 7 个字节加上一个分隔符。
更进一步,你可能会做得更好。您的磁盘不会逐字节读取数据,而是读取 blocks 中的数据。 ,并且通常您希望避免读取比您需要的更多的块。二进制格式更快的真正原因不是它需要更少的字节,而是它需要更少的块(占用更少字节的产品)。这意味着您希望最小化磁盘上的大小,因为从磁盘读取比从 RAM 读取慢一个数量级 - 磁盘访问以毫秒为单位,而 RAM 访问以微秒为单位。
那么现在你能做什么?如果您的矩阵是 sparse ,您可以只存储非零元素,这将为您节省大量空间。因此,不是存储每个点,而是为每个条目存储一对(索引,值)。这意味着每个条目现在是 8 个字节而不是 4 个字节,但是如果矩阵的一半以上为零,则可以节省大量空间。
最后,压缩在这里有很大帮助。当然,更多的压缩意味着更多的 CPU 时间来解压缩矩阵,但这也意味着更快的磁盘读取。在这里,您真的必须进行实验 - 在频谱的简单末端,Run Length Encoding很容易实现,而且效果往往出奇的好。这是有效的,因为如果您要存储小整数和“简单”浮点数,则大多数字节为零。如果相同的数字重复多次,这也很有效,这在矩阵中确实发生。我还建议查看更高级的方案,例如 bzip2 ,虽然计算更复杂,但可以显着减少磁盘大小。唉,压缩往往是非常特定于领域的,所以你必须在这里进行试验。在一个域中有效的方法在另一个域中并不总是有效。
关于performance - 重量和性能方面的最佳数据存储格式(例如,Txt、Asc、Bin 等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677983/
我有以下查询: select ema.es_symbol as symbol, ema.score as score, ema.weight as weight, rsi.relative_stren
我有一个 ms-sql 表,看起来像这样(重量 = kg)。 我希望能够计算给定标识符所需的箱子数量和每个箱子的重量。一个盒子最多可以容纳 30 公斤。该标识符的所有项目都可以在一个框中混合。我仅限于
我正在尝试通过 PHP 将重量分配给卡车。 条件 卡车可以有不同的尺寸 可设置单辆或多辆 卡车越少越好 我有这个 class VehicleCalculation { /** * @var
如何在这段代码中引用石头的重量,以便我可以在unlockChest方法中使用它?我基本上试图将用户从对象 new Stone()) 输入的权重相加,因此它 == 组合了用户在 Chest() 构造函数
我在线性布局中使用表格布局,第一行结果很好,但连续的行完全错误,尽管设置了它们。我不确定这是否是我正在运行的 Android Studio 版本的问题,或者它是否不适用于 kotlin ...有什么办
我在平衡方面遇到了麻烦。我觉得我在这里遗漏了一些东西.. 这个问题等同于以下情况: table 上散布着各种质量的砝码。 你手里拿着几个不同质量的砝码。 如果 table 上有一组重量与您手中的重量相
我已经在 YOLOv3 中进行了超过 3 个类别的自定义检测,但是检测结果不准确,所以我想用更多图像重新训练我的自定义 YOLO 权重,但是 当我用新图像运行它时,它立即完成,我做错了什么? 这是我如
所以我需要分割字符串: Laundry Detergent 2X Ultra Free Clear 50
我使用 ClientBundle 和 CssResource 接口(interface)。所有适用于类的样式都有效: 在 CSS 中:.dialogVPanel { margin: 5px;} 在界面
我几乎是编程新手,所以这可能看起来是一个非常愚蠢的问题,我已经尝试这样做有一段时间了,但无法理解它。 但是我想知道 JList 对象是否可以存储多个值,因此当我单击列表中的对象时,不同的值(例如价格、
我想创建具有相同宽度并被拉伸(stretch)以(匹配)父按钮的按钮。我需要以编程方式来完成它。首先,我创建了一个所需状态的布局草稿(只关注按钮的绿线):
我正在尝试在 iOS 中模拟 Android android:layout_weight="1" 中的属性。 我有一个带有 7 个按钮的 View ,我希望它们都具有相同的宽度和相同的边距。在 And
我想知道使用 XmlDocument 类来处理小型 XML 文件的感觉。如果在加载XML文件的过程中,XmlDocument为所有的XML元素及其关系创建了一整套面向对象的结构,理论上对于小的xml文
给定 n 个无限容量的箱子,我想将 m 件元素装入其中(每个元素都有特定的重量),同时最小化最重箱子的重量。 这不是传统的垃圾箱包装/背包问题,其中垃圾箱的容量有限,而您试图尽量减少使用的垃圾箱数量;
过去几天我一直在学习 D3。我尝试将我所学到的所有内容简化为一个简单的 D3 示例,但我看到了标题中提到的错误。 我确信这很简单,我错过了什么? 代码: .node { fill: #c
我是一名优秀的程序员,十分优秀!