问题标签 [run-length-encoding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3171 浏览

r - 使用 dplyr 时使用 rle 按运行分组

在 R 中,我想在根据变量的运行对其进行分组后总结我的数据x(也就是每组数据对应于连续x值相同的数据子集)。例如,考虑以下数据框,我想在其中计算y每次运行的平均值x

在此示例中,x变量的运行长度为 3,然后是 2,然后是 1,最后是 1,在这四次运行中取值 1、2、1 和 2。这些组中的相应均值是y2、4.5、6 和 7。

在基础 R 中使用 、作为数据tapply传递、使用从 计算运行次数并传递所需的汇总函数很容易执行此分组操作:dat$yrledat$x

我想我可以直接将这个逻辑传递给 dplyr,但到目前为止我的尝试都以错误告终:

为了完整起见,我可以自己使用,和来重新实现rle运行 id来解决这个问题,但它使分组代码更难阅读,并且涉及到一些重新发明轮子:cumsumheadtail

是什么导致我rle的 -based 分组代码失败,是否有任何解决方案可以让我在按运行 id 分组时dplyr继续使用?rle

0 投票
1 回答
359 浏览

r - 用 rle 计算增加的​​连续整数 R 的平均数

我的数据框中有两列,左列表示 id,右列包含递增的整数,有些是连续的,有些不是。没有重复的整数。我的目标是获得每个连续整数的平均数id 例如:

这是我的数据集的片段

station summary id

在上面的示例中,id 1具有以下连续整数个数moment- 2, 2, 2, 1, 1, 1, 1 - 所以平均值为 1.428

id 2在 - 1, 5, 2, 2 中具有以下连续整数个数moment- 所以平均值为 2.5

真正的数据集有大约 200 行和 300 个唯一 ID——我想要每个 ID 的平均值。

我知道您必须以某种方式使用 rle() 函数,并且我可以使用以下代码找到最大数量:

如何取平均值?

0 投票
2 回答
1687 浏览

java - 统计String的大写和小写字符并将计数附加到字符

我正在尝试打印字符串的输出以查找其中大写和小写的计数。

例如,如果字符串 =“AaaBBbCc”,我需要输出为:“A1a2B2b1C1c1”。

大写“A”的 IE 计数,然后是小写“a”的计数,附加字符。

下面是我所做的代码片段。任何人都可以建议它是如何进行的。我知道代码不符合标准:(

}

0 投票
4 回答
2872 浏览

string - 就地运行长度编码算法

我遇到了一个面试问题:

给定一个输入 String: aaaaabcddddee,将其转换为a5b1c1d4e2.

一个额外的限制是,这需要就地完成,这意味着不应使用额外的空间(数组)。

保证编码的字符串总是适合原始字符串。换句话说,abcde不会出现类似字符串的情况,因为它将被编码为a1b1c1d1e1比原始字符串占用更多空间。

面试官给我的一个提示是遍历字符串一次并找到节省的空间。

有时我仍然卡住了,如果不使用额外的变量,输入字符串中的某些值可能会被覆盖。

任何建议将不胜感激?

0 投票
2 回答
507 浏览

cuda - 在 CUDA 中高效解码 RLE

我需要在 CUDA 中解码 RLE,并且我一直在尝试考虑将 RLE 扩展为包含我所有值的列表的最有效方法。所以假设我的值是 2、3、4,我的运行是 3、3、1,我想将其扩展到 2、2、2、3、3、3、4。

起初我以为我可以使用cudaMemset,但现在我很确定启动内核并且我拥有 CUDA Compute Capability 3.0 所以即使为每个值/运行对启动新内核可能不是低效的,我也没有可用的动态并行性去做这个。

所以我想知道这个解决方案在我去实施它之前是否合理,因为如果你不聪明的话,有很多事情最终无法在 CUDA 上运行良好。cudaMalloc制作一个将cudaMemCpy调用到目的地的内核是否合理?我可以很容易地计算前缀总和,以知道将内存复制到哪里和从哪里复制,并使我所有的阅读至少合并。我担心的是打电话cudaMalloc等等cudaMemCpy很多次。

另一种可能的选择是将这些值写入共享内存,然后将它们复制到全局内存。我想知道我的第一个解决方案是否应该有效并且有效,或者我是否必须执行后者。

0 投票
1 回答
50 浏览

java - 这是我们的合作伙伴分配的运行长度编码程序。

我们正在尝试执行 Javadoc 上的指令。到目前为止,我们有这个,但与 index 参数混淆

0 投票
4 回答
1083 浏览

r - Create group names for consecutive values

Looks like an easy task, can't figure out a simpler way. I have an x vector below, and need to create group names for consecutive values. My attempt was using rle, better ideas?

0 投票
1 回答
29 浏览

python - 在 RLE 列表上的选择变量之间进行平均,最后一个元素有问题

所以我使用运行长度编码创建了一个压缩列表。现在我试图在列表中的某些变量(例如450180)中找到平均值。代码应该像这样工作

我对此很陌生,否则我会在压缩过程中进行平均。

我坚持的是两件事:未压缩时的结果列表与原始列表的长度不同,并且我不确定如果代码不通过最后一个元素如何附加最后一个元素。我可以在我的 for 循环中使用类似的索引elif i[0].index==len(lst),但这在计算上会很昂贵(数据集相当大)。我创建的是 for 循环之外的最终 if 语句,但结果列表的长度仍与原始列表不同。

只是为了那些以后会研究这个问题的人,我添加了我的解决方案,它结合了压缩和平均。为了阐明目的,我在 GIS 程序中压缩路段之间的角度以创建更小的数据集。450 可以被视为 Null 值。

0 投票
3 回答
226 浏览

r - 我可以在不使用 inverse 的情况下获得 rle 对象的总长度吗?

假设我有一个这样的 Rle,长度为 10:

如何在不使用的情况下获得该对象的长度inverse.rle

我有一些稀疏的 Rles 代表染色体,它们的长度可以达到数亿,所以我宁愿不使用逆。


akruns 答案不适用于我的数据:

0 投票
2 回答
824 浏览

compression - 用于序列化足压图的最佳无损压缩技术

我正在处理人脚的压力感应,我需要通过串行实时传输帧。

典型的框架如下所示,由平面背景和非平面数据块组成:

在此处输入图像描述

由于命令引起的微控制器开销,传输速度目前是一个瓶颈Serial.send,因此工程师正在使用Run Length Encoding压缩图像,由于平坦,连续的背景看起来不错,但我们希望将其压缩均匀更远。

我尝试了“坐标列表”编码格式(List<i, j, val>其中val> 0),但大小与 RLE 足够相似,不会产生显着差异。

在对 SO 进行一些研究时,人们说“不要重新发明轮子,对于任何类型的图像都有很多久经考验的压缩算法”,所以我想知道哪种图像最适合显示的图像类型下面,考虑:

  1. 压缩性能(因为它是由微控制器执行的);
  2. 大小 - 因为它是通过串行发送的,这目前是一个瓶颈(原文如此)。

其他方法是使用“稀疏矩阵”概念(而不是“图像压缩”概念),看起来有类似CRS或 CSR 的东西,我不太明白如何实现以及如何序列化正确地,甚至更少与图像压缩技术相比。

更新:我用我用来创建图像的数据创建了一个要点。这些是压缩方法的结果(每个条目一个字节):

  • 普通:([n_rows, n_columns, *data]):2290字节;
  • 坐标列表:([*(i, j, val)]):936字节;
  • 运行长度编码:([*(rowlength, rle-pairs)]):846字节;
  • 列表列表:690字节;
  • 列表的紧凑列表:(参见要点)498字节;