![v2-90ef453f96b9086db842e1c7bc0c7f3e_1440w.jpg?source=172ae18b](http://img-01.proxy.5ce.com/view/image?&type=2&guid=814d60ab-f32f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-90ef453f96b9086db842e1c7bc0c7f3e_1440w.jpg?source=172ae18b)
背景
在进行矩阵距离计算、网络分析时 (如基因网络、社媒网络),通常会产生一份对称矩阵。矩阵
保存这样的对称矩阵,实际上只需要保存上三角或下三角的数据。更一般的,我们可以将这样的表格转为3列。
![v2-aaeb8b32630c61746e2eda5ba449bf7f_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=814d60ab-f32f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-aaeb8b32630c61746e2eda5ba449bf7f_b.jpg)
现假定这样的文件一共有不超过
65535 个节点将会生成 2147385354 条链路,若每个 nodeName 占用 2byte、score 占用 8 byte (x.xxxxxx),文件总大小将达到 28GB!
分析
origin 和 target 种类较少且在输入文件中存在多行重复,我们考虑预先构造一个字典表保存所有可能的 nodeName,以实现精简表示。它们所有可能的种类 < 65535 种,因此可以在 2byte 范围内声明。字典表保存在 *.d 文件中。对于每一行数据,我们假定他们都是按照字典序的方向进行生成的组合,只需要通过排列组合的方法就能还原回原来的数据。
例如: 某个字典表为 A B C D
生成的 node 对为:(A, B), (A, C), (A, D), (B, C), (B, D), (C, D)
score 的数值范围都在 0-1 之间,如果这些数值保留6位有效数字,我们先将这样的数值
当然,对于 2byte,我们也可以将其扩展为 4.5 位,即第5位小数只保留一半。这样数值整数范围是 0-100000 的偶数或者奇数(50000种,2byte可以表示6w多个数字),也正好能在 2byte 范围内表示。
举个例子:如果我们是向下保留为偶数。那么 0.123456 和 0.132513,保留四位的话是 0.1234 和 0.1325,保留 4.5 位的话是 0.12344 和 0.13250
实现
生成测试数据 generateData.py
import
![v2-e584179680b324f579bea6f2d1b3c7cd_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=814d60ab-f32f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-e584179680b324f579bea6f2d1b3c7cd_b.jpg)
工具函数文件 Utils.py
def
Transfer.py 函数文件
"""
评估与结论
Python 操作实在是太慢了,但代码相当直观。我们额外用Java实现了这个编码解码功能并进行测试,结果如下:
![v2-3a2c22fdaba7d80cc71e4096f545ce85_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=814d60ab-f32f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-3a2c22fdaba7d80cc71e4096f545ce85_b.jpg)
这个效果还是相当不错的(原文件 49.15 MB 可以无损压缩为 5.72 MB,保留2位小数时可以达到 1.91 MB),速度也非常快 。
在 Java 版本中,对具有 1w 个节点的 1.24GB 文件压缩也仅仅需要 4.135s 时间、解压需要 2.818s 时间,远远快于 gzip 算法的 44.25s 和 3.59 s。并且,它可以将该文件压缩为 47.67MB-95.34MB-143.01MB 大小(当然,进一步使用 gzip 可以压缩到 40.07MB-87.65MB-133.24MB),而 gzip 压缩为 309.39 MB 大小。
由于该压缩策略采用了固定编码位长,它可以非常方便地进行随机访问。假设字典文件储存的节点数量为
行。节点名称为
基于以上特性,该编码方案可以成为相关领域的替代储存方案。
作者:张柳彬
如有疑问,请联系QQ:965579168
转载请声明出处