基于海量数据——二维三角数组(矩阵)的压缩以及数据映射定位

参考 : 矩阵(稀疏矩阵)压缩存储(3种方式)

在处理海量数据时,我把数据经过计算并存在了矩阵中(n×n的二维数组),需要开辟约8000*8000的空间,而且只存成了上三角(数据需要),因此有一半的空间是浪费的(存着无意义的数字0或-1),在开辟空间以及数据持久化时,保存的文件大小出乎我意料之外(为了保留矩阵的结构特征,采用了python下的json输出),达到了近300MB,计算加处理时间久,甚至连打开都耗费时间跟内存
在这里插入图片描述
便想着把它压缩在一维数组

并且要满足我的个人需求:根据一维数组的下标可以找回矩阵中的i和j值


例如以下上三角矩阵:(5*5)

1		2		3		4		5
		6		7		8		9
				10		11		12
						13		14
								15

存在一维数组后:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
**注意这里存储从下标1开始,0用于储存那些下三角无意义的值**

然后我要查找矩阵中第2行,第3列的数据

设矩阵为n×n,下标为 i 和 j ,有公式:

一维数组通项下标 = i * (2*n - i + 1) / 2 + j - i +1

带入n=5,i=2,j=3 得 下标=11
便可取出数据了

经过该处理,数据文件减少一半,然而我的数据后期可以剔除很多,估计会是稀疏上三角矩阵,因此可能会再进行二次压缩
在这里插入图片描述


一些题外话,如果该上三角矩阵数据不是很稀疏的话,不建议采用‘稀疏矩阵压缩法进行再次压缩,因为需要存储下标和值的话(值,i,j),可能需要开辟更多空间

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值