如果满足特定条件,请删除数组的行



我有一个数组,它可以是任何大小(行),但总是两列宽。我想丢弃任何包含偏离每列中值超过1的数字的行。

例如:

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

在上面的例子中,中位数(数组)给出[25]。因此,对于上面的列,我希望删除第三行和第四行,因为第三行在第一列中包含9,第四行在第二列中包含8,这两个行都超出了我的限制(距离中值1)。请注意,如果其中一列包含的数字不在该列中值的1以内,则我希望丢弃BOTH列。

任何帮助都将不胜感激。。。

我现在没有MATLAB,但我认为这应该可以工作。你至少应该能够遵循逻辑。

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

上面的代码所做的是找到所有索引,其中两个列中的数组值与每列的中值的距离最多为1。然后,它只选择与这些索引相对应的那些行。

在这个链接的帮助下,我创建了一个解决方案:

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

最新更新