{1024{1>位数组中有一个大的^值数组
这意味着存在多个具有相同值的指数范围。在
例如
consider the index range 741 to 795. It maps to 14
consider the index range 721 to 740. It maps to 15
consider the index range 796 to 815. It maps to 15
我想将此映射提供给一个python程序,该程序将输出以下内容:
^{pr2}$一些到groupby
映射值的代码已经准备好了,但是我在使用pairwise
编写表达式时遇到了困难。在
以前有人做过类似的事吗?在
我上传了两种形式的数据集:
通常,ordered by index。在
如果您不介意由于舍入而产生的不同值,我可以对您进行压缩。在
下面的代码可以实际执行您想做的事情;它与
^{pr2}$作为测试数据。如果在第一列中有索引,则需要在}的顺序。在
for
循环中切换val
和{编辑:哎呀,我漏了一行。固定的。另外,你的乘数实际上是36而不是35,我一定是在脑子里把(14,86)四舍五入到(15,85)。在
编辑2:演示如何只存储表的四分之一。在
如果从表中减去偏移量,只需将前两个
-vals[...]
改为。在另外,底部的比较是模糊的,因为我得到了72比1的错误。这只是因为你的值被四舍五入为整数;它们都是介于两个值中间的地方,所以准确度几乎没有下降。在
结束后,我迟迟没有找到这个解决方案"What's the most Pythonic way to identify consecutive duplicates in a list?"。在
注意:对于周期性fn,比如sine,您可以只存储表的四分之一(即256个值)或一半,然后在查找时对索引执行一点(定点)算法。正如我所说的,如果您进一步不存储+50的偏移量,则需要少一点,代价是在查找时间后增加一个整数。因此,79%的压缩很容易实现。RLE会给你更多。即使fn有噪声,你仍然可以用这种一般的方法得到相当好的压缩。在
正如agf指出的,你的
f(n) = 50 + 36*sin(72*pi*n/1024)
=50 + g(n)
,比如说。在因此,将
g(n) = 36*sin(72*pi*n/1024)
的256个值制成表格,只针对范围n=0..255则f(n)可通过以下公式轻松计算:
总之,这里有一个通用的表压缩解决方案,它将生成(istart,iend,value)三元组。在
我对如何使用列表理解和itertools.takewhile();需要抛光。在
^{pr2}$(注:在agf改变方法之前,我启动了桌上压缩机进近。。。正在尝试获取itertools或列表理解解决方案)
相关问题 更多 >
编程相关推荐