在matlab中将字符串数组的每个字母转换为整数

时间:2015-07-09 18:57:10

标签: matlab

我的任务是将给定序列的每个字母转换为matlab中的整数向量。例如,给定输入序列,' seq = TGCA'。由于这里我们总共有4个不同的字母,我打算编码' A'作为' 0001',编码' T' as' 0010',编码' G'作为' 0100'并编码' C'作为' 1000'。然后可以将整个序列编码为所有编码(0,1)向量的竞争。因此,在这种情况下,整个序列将是' 0010010000001'任何意见将不胜感激。非常感谢。

2 个答案:

答案 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