2015-07-09 2 views
0

У меня есть задача перенести каждую букву заданной последовательности в целочисленный вектор в matlab. Например, с учетом входной последовательности «seq = TGCA». Поскольку здесь у нас всего 4 разных буквы, я планирую кодировать «A» как «0001», кодировать «T» как «0010», кодировать «G» как «0100» и кодировать «C» как «1000». И тогда вся последовательность может быть закодирована как contnationn всех закодированных (0,1) векторов. Таким образом, в этом случае вся последовательность будет «0010010010000001». Приветствуются любые комментарии. Большое спасибо.переносить каждую букву строкового массива на целые числа в matlab

+0

Какова цель? Что делать, если у нас есть более уникальные персонажи? Кроме того, '0001' выглядит более двоичным, чем само целое. – Matt

+1

Seing TGCA, я думаю, это связано с ДНК, не так ли? – Ikaros

+0

@Matt, если у нас есть больше уникальных символов, тогда мы увеличим размер векторов. – ntough

ответ

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,[]) 

Это выводит логический вектор, если символ является inteded использование:

F=char(reshape(bsxfun(@eq,key(:),seq(:).'),1,[])+'0') 
+0

Хорошая идея. Большое спасибо. – ntough

0

октавных не Suppo к.т. containers.Map, поэтому я буду тратой 80 строк из матрицы 84x4 ...

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 
+0

это тоже хорошая идея. Большое спасибо. – ntough