2011-11-24 104 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