我的任务是将给定序列的每个字母转换为matlab中的整数向量。例如,给定输入序列,' seq = TGCA'。由于这里我们总共有4个不同的字母,我打算编码' A'作为' 0001',编码' T' as' 0010',编码' G'作为' 0100'并编码' C'作为' 1000'。然后可以将整个序列编码为所有编码(0,1)向量的竞争。因此,在这种情况下,整个序列将是' 0010010000001'任何意见将不胜感激。非常感谢。
答案 0 :(得分:1)
这个解决方案背后的想法是定义一个键,当与字符串比较时返回预期的输出:
>> key='CGTA'
key =
CGTA
>> key=='A'
ans =
0 0 0 1
>> key=='T'
ans =
0 0 1 0
这基本上解决了它,现在使用bsxfun进行矢量化:
E=reshape(bsxfun(@eq,key(:),seq(:).'),1,[])
如果使用char,则输出逻辑向量:
F=char(reshape(bsxfun(@eq,key(:),seq(:).'),1,[])+'0')
答案 1 :(得分:0)
Octave不支持containers.Map
,所以我要从84x4矩阵中浪费80行...
codes(['A','T','G','C'],:)=['0001';'0010';'0100';'1000'];
seq = 'ATACAGCTAGGATCA';
encodedSeq=codes(seq,:);
encodedSeq =
0001
0010
0001
1000
0001
0100
1000
0010
0001
0100
0100
0001
0010
1000
0001
或
reshape(encodedSeq,1,[])
ans = 000100100000010000001000110000010000010000100101010001001001