如何根据3个不同的标准删除矩阵行?

时间:2017-05-16 11:08:14

标签: matlab matrix vector

假设我有一个包含整数和非整数的23x3矩阵。理想情况下,我希望根据以下标准删除一些矩阵行:

  • 如果任何2列是非整数
  • ,则删除行
  • 如果所有3列都是非整数
  • ,则删除行
  • 如果所有列都是整数,则删除行

以上暗示将留下的行应仅包含one non-integertwo integers

下面是我的矩阵:

    A = [1  1.5 1
         1  2.5 1
         1  3.5 1
         1  1   1.5
         1  1.5 1.5
         1  2   1.5
         1  2.5 1.5
         1  3   1.5
         1  3.5 1.5
         1  4   1.5
         1  1.5 2
         1  2.5 2
         1  3.5 2
         1  1   2.5
         1  1.5 2.5
         1  2   2.5
         1  2.5 2.5
         1  3   2.5
         1  3.5 2.5
         1  4   2.5
         1  1.5 3
         1  2.5 3
         1  3.5 3];

我的最终输出应该是:

B = [1  1.5 1  
     1  2.5 1
     1  3.5 1
     1  1   1.5
     1  2   1.5
     1  3   1.5
     1  4   1.5
     1  1.5 2
     1  2.5 2
     1  3.5 2
     1  1   2.5
     1  2   2.5
     1  3   2.5
     1  4   2.5
     1  1.5 3
     1  2.5 3
     1  3.5 3];

我还在学习,仍然试图找到自己的方向。拜托,伙计们帮我解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:1)

您的三个标准与一个标准相同:

  • 仅保留1个非整数
  • 的行

其中,从昨天的(非常相似)问题中获取灵感可以使用

完成
B = A;
B(sum(mod(B,1)~=0, 2)~=1, :) = [];

这样可以检查previous question中的非整数,然后在整行中求和,找到只传递一个元素的行。所有其他行都将被删除。

如果您确实希望将其实现为3个条件,则可以按照管道|分隔的逻辑“或”语句完成(按您编写的顺序):

B = A;
B(sum(mod(B,1)~=0, 2)==2 | sum(mod(B,1)~=0, 2)==3 | sum(mod(B,1)==0, 2)==3, :) = [];