Как оптимизировать этот код замены строки - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть алгоритм, промежуточным этапом которого является замена подстроки другой подстрокой.Если быть точным, у меня есть строка HBIN_NEW, и у меня есть другая строка P. Я хочу заменить каждый 6-й, 7-й, 8-й элемент строки HREP на 1-й, 2-й, 3-й элемент PBIN_NEW.Для этого я написал код

     For example If PBIN_NEW='1111111101010101' and HBIN_NEW='1111100010101010' 
   then the new string HREP
   should be HREP='1111111110101101' 
      for k=1:8:262144*8
   HREP=strrep(HBIN_NEW,HBIN_NEW(k+5:k+7),PBIN_NEW(k:k+2));
end

Является ли этот код правильным для реализации вышеуказанной идеи.И если да, то такая схема замены занимает много времени, может кто-нибудь предложить какой-нибудь оптимизированный способ сделать это.

1 Ответ

0 голосов
/ 24 декабря 2018

Формулировка по этому вопросу все еще немного неуклюжа, и я не совсем уверен, как получить пример HREP с учетом формулировки, но, скорее всего, strrep излишне из-за того, что, похоже, вы пытаетесь сделать.Хорошо бы использовать простой цикл с присваиваниями:

HREP = HBIN_NEW;
for k=1:8:length(HBIN_NEW)
   HREP(k+5:k+7) = PBIN_NEW(k:k+2);
end

Часто, хотя может быть лучше просто перечислить назначения позиций и избежать цикла.Таким образом, вместо этого у вас есть что-то вроде этого:

HREP = HBIN_NEW;
HREP(6:8:end) = PBIN_NEW(1:8:end);
HREP(7:8:end) = PBIN_NEW(2:8:end);
HREP(8:8:end) = PBIN_NEW(3:8:end);

Я думаю, что это делает то, что вы хотите, или вам нужно достаточно близко ...

Наконец, немного незапрошенных советов по стилю.Хотя в Matlab нет очень строгого руководства по стилю кода, скорее всего использование всех заглавных букв с подчеркиванием не лучший способ присвоения имен вашим переменным.Лично я предпочитаю строчные буквы с подчеркиванием, например, pbin_new и использую только заглавные слова для констант ...

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