У меня есть задача перенести каждую букву заданной последовательности в целочисленный вектор в matlab. Например, с учетом входной последовательности «seq = TGCA». Поскольку здесь у нас всего 4 разных буквы, я планирую кодировать «A» как «0001», кодировать «T» как «0010», кодировать «G» как «0100» и кодировать «C» как «1000». И тогда вся последовательность может быть закодирована как contnationn всех закодированных (0,1) векторов. Таким образом, в этом случае вся последовательность будет «0010010010000001». Приветствуются любые комментарии. Большое спасибо.переносить каждую букву строкового массива на целые числа в matlab
ответ
Идея этого решения заключается в определении ключа, который возвращает ожидаемый результат по сравнению со строкой:
>> 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')
Хорошая идея. Большое спасибо. – ntough
октавных не 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
это тоже хорошая идея. Большое спасибо. – ntough
Какова цель? Что делать, если у нас есть более уникальные персонажи? Кроме того, '0001' выглядит более двоичным, чем само целое. – Matt
Seing TGCA, я думаю, это связано с ДНК, не так ли? – Ikaros
@Matt, если у нас есть больше уникальных символов, тогда мы увеличим размер векторов. – ntough