2012-01-21 66 views
4

配列は任意のサイズ(行数)でもかまいませんが、常に2列幅です。私は、各列の中央値から1よりも多い数を含む行を捨てたい。例えば特定の条件を満たす場合に配列の行を削除します

:上記の例で

array = 
2 5 
3 4 
9 5 
2 8 
3 5 
. . 
. . 
. . 
etc 

、中央値(アレイ)[2~5]を与えます。上記の列では、3行目が9行目を含み、4行目が2行目に8行を含むため、3行目と4行目は削除されると予想します。中央値から)。 EITHER列にその列の中央値の1以内にない数が含まれている場合は、両方の列を破棄したいことに注意してください。

任意の助けをいただければ幸いです...

答えて

4

は、私が今MATLABを持っていないが、私は、これは動作するはずだと思います。あなたは少なくとも論理に従うことができるはずです。

med = median(arrray); 
arrayNew = array((abs(array(:,1)-med(1))<=1) & (abs(array(:,2)-med(1))<=2), :); 

何上記のコードが実行されるすべてのインデックスを発見した場合両方列の配列値は、各列の中央から最も距離1です。次に、これらの索引に対応する行のみを選択します。

+0

あなたのソリューションは、あまりにも動作します!そしてはるかに簡単です。ありがとうございました。 – CaptainProg

1

私はthis linkからいくつかの助けを借りて解決策を作成しました:

function newArray = removeOutliers(oldArray, driftAllowance) 
% Remove elements from an array that are more than a certain amount from 
% the median of an old array 

r = size(oldArray, 1); % find the length of the array 
r2 = 1; % a new row index for a new table 
medianData = [3 5]; 
medianX = medianData(1); 
medianY = medianData(2); 
for i = 1 : r % for every row in the array 
    % If it is within the drift limits of the median 
    if oldArray(i,1) <= medianX + (driftAllowance/2)... 
    && oldArray(i,1) >= medianX - (driftAllowance/2)... 
    && oldArray(i,2) <= medianY + (driftAllowance/2)... 
    && oldArray(i,2) >= medianY - (driftAllowance/2) 
     newArray(r2,:) = oldArray(i,:); % add it to a new array 
     r2 = r2 + 1; % move the new row index on 
    end 
end 
関連する問題