标签: run-length-encoding

根据计数的元素数组复制

我的问题是与此类似一个,但我想根据在相同尺寸的第二阵列指定的计数复制每个元素.

这方面的一个例子,比如我有一个数组v = [3 1 9 4],我想用它rep = [2 3 1 5]来复制第一个元素2次,第二次复制,依此类推[3 3 1 1 1 9 4 4 4 4 4].

到目前为止,我正在使用一个简单的循环来完成工作.这就是我的开始:

vv = [];
for i=1:numel(v)
    vv = [vv repmat(v(i),1,rep(i))];
end
Run Code Online (Sandbox Code Playgroud)

我设法通过预先分配空间来改进:

vv = zeros(1,sum(rep));
c = cumsum([1 rep]);
for i=1:numel(v)
    vv(c(i):c(i)+rep(i)-1) = repmat(v(i),1,rep(i));
end
Run Code Online (Sandbox Code Playgroud)

但是我仍然觉得必须有一个更聪明的方法来做到这一点......谢谢

arrays matlab repeat run-length-encoding elementwise-operations

8
推荐指数
1
解决办法
2926
查看次数

从Rle向量有效地构建GRanges/IRanges

我有一个运行长度编码的向量,按顺序表示基因组上每个位置的一些值.作为一个玩具示例,假设我只有一条长度为10的染色体,那么我会看到一个矢量

library(GenomicRanges)

set.seed(1)
toyData = Rle(sample(1:3,10,replace=TRUE))
Run Code Online (Sandbox Code Playgroud)

我想将其强制转换为GRanges对象.我能想到的最好的是

gr = GRanges('toyChr',IRanges(cumsum(c(0,runLength(toyData)[-nrun(toyData)])),
                              width=runLength(toyData)),
             toyData = runValue(toyData))
Run Code Online (Sandbox Code Playgroud)

哪个有效,但速度很慢.有没有更快的方法来构建同一个对象?

r bioinformatics run-length-encoding bioconductor iranges

7
推荐指数
1
解决办法
363
查看次数

具有中断的增量序列

我有一个重复序列的数据集TRUE,我希望根据某些条件标记 - 依据id序列的增量值.A FALSE打破TRUEs 的序列,并且第一个FALSE打破任何给定序列的序列TRUE应包括在该序列中.FALSEs之间TRUE的连续s 是无关紧要的,标记为0.

例如:

> test
   id logical sequence
1   1    TRUE        1
2   1    TRUE        1
3   1   FALSE        1
4   1    TRUE        2
5   1    TRUE        2
6   1   FALSE        2
7   1    TRUE        3
8   2    TRUE        1
9   2    TRUE        1
10  2    TRUE        1
11  2   FALSE        1
12  2    TRUE        2
13  2    TRUE        2
14 …
Run Code Online (Sandbox Code Playgroud)

r run-length-encoding dplyr data.table

7
推荐指数
1
解决办法
156
查看次数

找到最小长度RLE

经典RLE算法通过使用数字来压缩数据,以表示数字后面的字符出现在该位置的文本中的次数.例如:

AAABBAAABBCECE => 3A2B3A2B1C1E1C1E

但是,在上面的示例中,该方法导致压缩文本使用更多空间.更好的想法是使用数字来表示数字后面的子字符串出现在给定文本中的次数.例如:

AAABBAAABBCECE => 2AAABB2CE("AAABB"两次,然后"CE"两次).

现在,我的问题是:如何使用这种方法实现一个有效的算法,找出最佳RLE中的最小字符数?存在蛮力方法,但我需要更快的东西(最多O(长度2)).也许我们可以使用动态编程?

algorithm dynamic-programming run-length-encoding

6
推荐指数
1
解决办法
1208
查看次数

连续数字系列(不同长度)

如果有人向我展示了一个简单的方法,我将不胜感激.假设我在MATLAB中有一个向量

d = [3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2]
Run Code Online (Sandbox Code Playgroud)

我想找到连续数字"twos"系列和那些系列的长度.

数字二十可以很容易找到x=find(d==2).但我想要的是得到一个包含所有连续数字序列的长度的向量,这意味着我在这种情况下的结果将是这样的向量:

[1 3 1 5 1].
Run Code Online (Sandbox Code Playgroud)

谁可以帮助我?

matlab vector run-length-encoding

6
推荐指数
2
解决办法
1万
查看次数

计算相同长度向量中的连续元素

如果我有一个矢量

"a": 0 0 1 1 1 0 0 0 0 1 1 0 0 0
Run Code Online (Sandbox Code Playgroud)

如何生成包含连续元素数的相同长度的向量,如下所示:

"b": 2 2 3 3 3 4 4 4 4 2 2 3 3 3
Run Code Online (Sandbox Code Playgroud)

我试过了,但我没有设法以这种方式伸展它.

r vector count sequence run-length-encoding

6
推荐指数
2
解决办法
173
查看次数

给定排序字符串的游程编码

为给定字符串的游程长度编码编写代码
示例输入:aaaaaaaaaabcccccc
输出:a10bc6

我的代码:

static void Main(string[] args)
{
    string str = "aaaaaaaaaabcccccc";
    var qry = (from c in str
               group c by c into grp
               select new
               {
                   output = grp.Key.ToString() + grp.Count().ToString()
               });
    StringBuilder sb = new StringBuilder();
    foreach (var item in qry)
    {
        sb.Append(item.output);
    }
    Console.WriteLine(sb.ToString());
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

然而它返回:

a10b1c6

我想删除非重复字符的计数,这里是字母“b”的“1”。

假设它是一个已排序的字符串。

c# linq run-length-encoding

5
推荐指数
1
解决办法
5088
查看次数

计数在矩阵的列中运行

我有一个矩阵1s,并-1s用随机穿插0s:

%// create matrix of 1s and -1s

hypwayt = randn(10,5);
hypwayt(hypwayt > 0) =  1;
hypwayt(hypwayt < 0) = -1;

%// create numz random indices at which to insert 0s (pairs of indices may  
%// repeat, so final number of inserted zeros may be < numz)

numz = 15;
a = 1;
b = 10;
r = round((b-a).*rand(numz,1) + a);
s = round((5-1).*rand(numz,1) + a);

for nx = 1:numz
    hypwayt(r(nx),s(nx)) = 0
end …
Run Code Online (Sandbox Code Playgroud)

matlab run-length-encoding

5
推荐指数
1
解决办法
148
查看次数

列表操作后Groupby对象消失

我正在尝试游程编码问题,在运行 groupby & list 操作后,我的 groupby 对象以某种方式消失了。

import itertools
s = 'AAAABBBCCDAA'
for c, group in itertools.groupby(s):
    print(list(group))
    print(list(group))
Run Code Online (Sandbox Code Playgroud)

我的输出是

['A', 'A', 'A', 'A']
[]
['B', 'B', 'B']
[]
['C', 'C']
[]
['D']
[]
['A', 'A']
[]
Run Code Online (Sandbox Code Playgroud)

因此对于每个循环,两个打印命令会产生不同的结果。

有人可以帮助解释我做错了什么吗?

python run-length-encoding

5
推荐指数
1
解决办法
92
查看次数

为非 NA 值的运行创建组编号

我有以下数据框 df (dput如下):

> df
   id value
1   1     1
2   2     3
3   3     2
4  NA     1
5  NA     3
6   8     4
7   9     2
8  10     1
9  NA     1
10 NA     3
11 15     2
12 16     1
13 NA     3
14 NA     4
15 NA     2
16 20     1
17 21     1
18 22     3
19 NA     2
20 NA     1
21 NA     3
22 66     4
23 67     2
24 68 …
Run Code Online (Sandbox Code Playgroud)

r run-length-encoding dataframe dplyr

5
推荐指数
1
解决办法
172
查看次数