![]() |
1
2
基本上,任何图形压缩算法都会满足您的需要。它们经过了大量优化,可以将二维数字阵列压缩到尽可能小的占地面积中。 编辑添加: 另一个需要考虑的问题是,由于您希望使用压缩来减少处理时间,因此获得真正高的压缩比通常需要更多的计算来压缩和解压缩数组。你可能会遇到这样的情况:比起运行神经网络,你花费更多的时间压缩和解压缩数组。 再次编辑以添加: 根据你的评论,听起来你可能想要的是 space-filling curve . 使用曲线将50x50*数组转换为1x2500行,然后得出一个公式,该公式近似于数组中每个单元格所需的值。 *数组必须是50x50吗?如果空间填充曲线是一个尺寸稍有不同的正方形,那么用它填充可能会容易得多。例如,希尔伯特曲线适用于二次幂的维度。 |
![]() |
2
1
有一件事你可以尝试的是采取你的1d线的快速傅立叶变换,然后删除稍后(高频)的条款。例如,在Matlab中,我执行了以下操作:
可能发生的情况是f的ifft峰非常接近y的峰,它们不一定是y的最高点,但它们是峰。例如,这个过程中,在f的反向fft中,x=424、475和725处有峰值,在x=423、475和726处,y也有峰值。然而,y的全局最大值是x=503,这是ifft(f)的峰值,但不是很高。 但是,这只会将您的数据使用量减少一半,因为我将1000个双精度值转换为250个复杂值。仅使用FFT的实部即可获得进一步的增加:
这仍然产生了相当好的结果,ifft(f)的每一个主峰与y中的一个峰相对应,在大多数情况下,该峰至多只有2个距离,并且您直接使用1/4的存储空间。 但是,这仍然不能得到“一个或两个双值”的结果。你现在把2500双装成625双。你可以通过削减更多的条款来尝试,但是你必须通过削减更多的条款来“近距离”测试更多的价值。也许你可以保留前10%的条件,找到最大值,然后在3或4的距离内寻找;这将使你的2500倍减少到“仅仅”250倍。只有测试才能找出最适合您的应用程序的方法。 如果你是 真的? 不顾一切,你可以去最低1%的频率,并搜索5或6个方向的真正峰值。但这仍然会给你留下25个双打。 我不认为有任何方法可以把2500个双打变成只有1或2个,并让它可逆成任何有意义的。看看信息理论文本,看看为什么。 我建议你使用matlab,gnu的八度音阶,甚至excel,然后玩类似的游戏,找到最适合你的结果。 |