我的问题是与此类似一个,但我想根据在相同尺寸的第二阵列指定的计数复制每个元素.
这方面的一个例子,比如我有一个数组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
我有一个运行长度编码的向量,按顺序表示基因组上每个位置的一些值.作为一个玩具示例,假设我只有一条长度为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)
哪个有效,但速度很慢.有没有更快的方法来构建同一个对象?
我有一个重复序列的数据集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) 经典RLE算法通过使用数字来压缩数据,以表示数字后面的字符出现在该位置的文本中的次数.例如:
AAABBAAABBCECE => 3A2B3A2B1C1E1C1E
但是,在上面的示例中,该方法导致压缩文本使用更多空间.更好的想法是使用数字来表示数字后面的子字符串出现在给定文本中的次数.例如:
AAABBAAABBCECE => 2AAABB2CE("AAABB"两次,然后"CE"两次).
现在,我的问题是:如何使用这种方法实现一个有效的算法,找出最佳RLE中的最小字符数?存在蛮力方法,但我需要更快的东西(最多O(长度2)).也许我们可以使用动态编程?
如果有人向我展示了一个简单的方法,我将不胜感激.假设我在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)
谁可以帮助我?
如果我有一个矢量
"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)
我试过了,但我没有设法以这种方式伸展它.
为给定字符串的游程长度编码编写代码
示例输入: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”。
假设它是一个已排序的字符串。
我有一个矩阵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) 我正在尝试游程编码问题,在运行 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)
因此对于每个循环,两个打印命令会产生不同的结果。
有人可以帮助解释我做错了什么吗?
我有以下数据框 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)