【问题标题】:Remove rows of array if specific criteria met如果满足特定条件,则删除数组行
【发布时间】:2015-08-06 19:07:57
【问题描述】:

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

例如:

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

在上面的例子中,median(array) 给出 [2 5]。因此,对于上面的列,我希望第三行和第四行被消除,因为第三行在第一列中包含 9,第四行在第二列中包含 8,两者都超出了我的限制(1从中位数)。请注意,如果任一列包含的数字不在该列中位数的 1 范围内,我想丢弃两列。

任何帮助将不胜感激...

【问题讨论】:

    标签: arrays matlab


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      在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
      

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 2015-10-13
        • 1970-01-01
        • 2014-05-22
        • 2023-02-15
        • 1970-01-01
        • 2020-09-11
        • 2021-06-06
        • 1970-01-01
        相关资源
        最近更新 更多