сравнивая два разных вектора одинаковой длины в Matlab - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть две матрицы A и B. A - это массив длиной 1000X1, состоящий из 0 и 1, и B также имеет одинаковый размер. Теперь B является выходом функции, которая выполняет операцию развертки, принимая A в качестве входа. Развертка - это не что иное, как добавление нулей вместо 1 в A. Таким образом, значения B похожи на A, за исключением того, что некоторые из 1 заменяются на 0. Теперь моя задача состоит в том, чтобы заполнить те 0 значений в B, которые были заменены после операции развертки случайными двоичными значениями. Я сделал это с помощью пользователя из этого замечательного веб-сайта. И код для того же здесь

idx=strfind(B,[0 0 0 0]);
n=dec2bin(randi([0 15],[numel(idx) 1]),4) - '0';
idx=bsxfun(@plus, idx', (0:3));
xx = B;
xx(idx(:)) = n(:);

Теперь эта функция также заменит нули, которые уже присутствовали в A. Я хочу заменить только те нули, которые были изменены с 1 на 0, а не те нули, которые уже были нулями в A. Любая помощь будет очень цениться ,

1 Ответ

0 голосов
/ 24 ноября 2011

Я бы сделал:

function modifiedB=modifyB(A,B)
  idx=(A~=B); %% or idx=((A==1)&(B==0)); %% find the indices where B changed
  B(idx)=(rand(nnz(idx),1)>0.5); %% replace at those indices by random numbers
  modifiedB=B;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...