Функция, в MATLAB ДНК репликации - PullRequest
3 голосов
/ 21 апреля 2011

Я пытаюсь выяснить команду функции в Matlab, и у меня возникли некоторые трудности. Я пытаюсь написать функцию Matlab с именем dna_replicate. Он будет реплицировать данную нить и вернет нить партнера

Например, если пользователь вводит ATGCATGCAHGCAGTC, он должен вернуть TACGTACGT CGTCAG

А -> Т G -> C, если пользователь вводит не эти 4 буквы, в цепочке партнера должен быть пробел. Спасибо за вашу помощь

Ответы [ 4 ]

7 голосов
/ 21 апреля 2011

Эта реализация должна быть быстрее, включая простой просмотр таблицы. Обратите внимание, что таблица t создается только один раз при первом вызове функции.

function out = dna_replicate(in)
  persistent t
  if isempty(t)
    t = blanks(256);
    t('ATGC') = 'TACG';
  end
  out = t(in);
end
1 голос
/ 21 апреля 2011

Вы можете создать простое векторизованное решение, используя функцию ISMEMBER :

function outString = dna_replicate(inString)
  [~,index] = ismember(upper(inString),'ACGT');  %# Find the indices of inStrings
                                                 %#   letters in string `ACGT`
  outString = 'ACGT ';             %# Initialize outString to `ACGT` and a blank
  outString = outString(5-index);  %# Use inverted and shifted index to expand
                                   %#   outString to the size of inString
end

А вот и тест:

>> dna_replicate('ATGCATGCAHGCAGTC')

ans =

TACGTACGT CGTCAG
1 голос
/ 21 апреля 2011

Как насчет:

function out = dna_replicate(in)
in = upper(in); % Ensures all same case
A = in=='A';
T = in=='T';
C = in=='C';
G = in=='G';
out = in;
out(A) = 'T';
out(T) = 'A';
out(C) = 'G';
out(G) = 'C';
out(~(A|T|C|G)) = ' ';

пока работает ответ @Jirka cigler, он использует цикл for, а также динамически растущий вектор out. Так как matlab оптимизирован для векторных операций, этот ответ должен работать лучше.

0 голосов
/ 21 апреля 2011

Я думаю, это можно реализовать следующим образом:

   function out=dna_replicate(in)
for i=1:numel(in)
    switch in(i)
        case 'A'
            out(i)= 'T';
        case 'G'
            out(i)= 'C';
        case 'T'
            out(i)='A';
        case 'C'
            out(i)='G';
        otherwise
            out(i)=' ';
    end
end

эта функция имеет аргумент типа char

in='ATGCATGCAHGCAGTC'

, и вы можете запустить

out = dna_replicate (in)

, чтобы получить желаемый результат: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...