2017-02-28 13 views
0

私はセル配列している:私は入手いくつかの基準に基づいて配列内のセルを置き換えるにはどうすればよいですか?

im = {'A+' NaN 'B-'; NaN NaN NaN; NaN 'A+' 'B+'; 'B+' NaN 'A-'; 'B+' NaN NaN; 'B-' 'A-', NaN} 

、そこから:

refPoints = find((any(strcmp('A+', im),2) | any(strcmp('A-', im),2)) & (any(strcmp('B+', im),2) | any(strcmp('B-', im),2))) 

います:

refPoints = [1;3;4;6]

を今、私はそうするようimをループしたいですあまりにも近いポイントを無効にして(例えば、1の倍率で)、対応するセルを0に置き換えます。

この例では、refPoints 3 and 4は近いので、無効にする必要があります。私は、次のコードを試してみました

im = {'A+' NaN 'B-'; NaN NaN NaN; NaN NaN NaN; NaN NaN NaN; 'B+' NaN NaN; 'B-' 'A-', NaN} 

refPoints = [1;6] 

for ii = 1: size(im, 1)-1 

    if find((any(strcmp('A+', im(ii,:))) | any(strcmp('A-', im(ii,:)))) & (any(strcmp('B+', im(ii,:))) | any(strcmp('B-', im(ii,:)))))==true ... 
     & find((any(strcmp('A+', im(ii+1,:))) | any(strcmp('A-', im(ii+1,:)))) & (any(strcmp('B+', im(ii+1,:))) | any(strcmp('B-', im(ii+1,:)))))==true 

    im(ii,:) ={NaN}; 

    end 

end 

これが3行目に予想されるのではなくて、私はこのように私の最終的な結果があることを期待します4行目。私はここで間違って何をしているのか分かりませんが、何をすべきか分かりません。

これに関するご意見、ご提案、アドバイスなどありがとうございます。前もって感謝します。

答えて

0

この問題は非常に近いyour previous questionに近いですが、私はこの少し異なる答えがあなたに役立つことを願っています。

次のようにisPreviousToClose状態変数を導入することによって、この問題を解決することができる:次または前の行が近い場合

isPreviousToClose = false; 
for ii = 1: size(im, 1)-1 

    if ((any(strcmp('A+', im(ii,:))) || any(strcmp('A-', im(ii,:)))) && (any(strcmp('B+', im(ii,:))) || any(strcmp('B-', im(ii,:))))) ... 
     && (isPreviousToClose || ((any(strcmp('A+', im(ii+1,:))) || any(strcmp('A-', im(ii+1,:)))) && (any(strcmp('B+', im(ii+1,:))) || any(strcmp('B-', im(ii+1,:)))))) 
     isPreviousToClose = true; 
     im(ii,:) ={NaN}; 
    else 
     isPreviousToClose = false; 
    end 
end 
if (isPreviousToClose) 
    im(end,:) ={NaN}; 
end 

電流線は、NaNに設定されています。

+0

ありがとう@ m7913d。それは完全に動作します。これは私にとってどのように機能しているのですか?このisPreviousToCloseというものは何ですか? – User1772

+0

'isPreviousToClose'は、前の行が削除された場合にtrueになります。現在の行があなたの条件に合っていれば、前の行が閉じる(つまり 'isPreviousToClose')か、次の行が閉じることになると、それは近すぎるでしょう。最後の行は、forループ( 'size(im、1)-1')で扱われないため、別のifテストが必要です。 プログラムをより良く理解するには、MATLABデバッガを使用してコードをステップバイステップで実行すると便利です。 – m7913d

+0

ええ、私はあなたが意味するものを参照してください。大変ありがとうございました!..非常に感謝しています... – User1772

関連する問題