2011-11-24 105 views
0

我有两个矩阵A和B.A是长度为1000X1的数组,它由0和1组成,B也是相同的大小。现在B是以A为输入执行扫描操作的函数的输出。扫描只不过是在A的位置添加了零,所以B的值与A相似,除了1的一部分被替换为0之外。现在我的任务是填充B中的那些0值,这是在扫描操作后用随机二进制值替换的。我已经在这个真棒网站的用户帮助下完成了这项工作。而对于同样的代码是在这里在matlab中比较两个长度相同的不相似的向量

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的零的零,而不是那些0的哪些人在答案中已经为零。任何帮助将非常感激。

回答

0

我会做:

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

我应该在哪里在上面的函数中添加此代码!顺便谢谢你的回复! – Spaniard89

+0

你应该在计算“B =扫描(A)”后立即执行该操作;“上面的代码将用随机二进制数字代替B的变化坐标。 – Oli

+0

所以我不应该使用我上面发布的代码?你的这两行会做魔术吗?在扫描操作之后,随机零将出现在B中,而我只是希望那些零被替换为随机二进制值,而不是已经为零的那个!你能告诉我如何在功能上添加你的代码,将A和B作为输入,并将B的修改版本作为输出!非常感谢你提前! – Spaniard89