Matlab 如何删除包含所有整数的矩阵行?
假设我有一个7x3矩阵,它包含整数和非整数。我想要的是删除所有只包含整数的行。例如:Matlab 如何删除包含所有整数的矩阵行?,matlab,matrix,vector,Matlab,Matrix,Vector,假设我有一个7x3矩阵,它包含整数和非整数。我想要的是删除所有只包含整数的行。例如: A = [1, 1, 2 2, 1.5, 1 3, 1.5, 2 1, 2, 1 2, 2.5, 1 3, 2.5, 1 1, 3, 2]; 我的输出应该是: B = [2, 1.5, 1 3, 1.5, 2 2, 2.5, 1 3, 2.5, 1]; 拜托,我怎么可能做到这一点?谢谢。另一种方法是取矩阵的值,并将其与
A = [1, 1, 2
2, 1.5, 1
3, 1.5, 2
1, 2, 1
2, 2.5, 1
3, 2.5, 1
1, 3, 2];
我的输出应该是:
B = [2, 1.5, 1
3, 1.5, 2
2, 2.5, 1
3, 2.5, 1];
拜托,我怎么可能做到这一点?谢谢。另一种方法是取矩阵的值,并将其与原始值进行比较。因此,您将找到这两行之间相等的行,并删除这些行
B = A;
B(all(mod(A,1)==0, 2), :) = [];
B = A;
B(all(floor(B) == B, 2), :) = [];
这背后的逻辑相当简单<代码>楼层截断矩阵,以便只保留整数(即不保留小数点)。然后,您将按元素将其与原始矩阵进行比较。当您选择下限
时,那些原本是整数的值仍然是整数,因此那些整数元素将给您一个true
结果。那些浮点元素将为您提供false
。然后,我们使用独立地查看每一行,并查看一行的所有列是否都是true
,这意味着整行由整数组成。因此,我们将找到这些行,并将它们从最终矩阵中删除,以生成所需的结果
因此,我们得到:
>> format long g;
>> B
B =
2 1.5 1
3 1.5 2
2 2.5 1
3 2.5 1
另一种方法是取矩阵的值,并将其与原始值进行比较。因此,您将找到这两行之间相等的行,并删除这些行
B = A;
B(all(floor(B) == B, 2), :) = [];
这背后的逻辑相当简单<代码>楼层截断矩阵,以便只保留整数(即不保留小数点)。然后,您将按元素将其与原始矩阵进行比较。当您选择下限
时,那些原本是整数的值仍然是整数,因此那些整数元素将给您一个true
结果。那些浮点元素将为您提供false
。然后,我们使用独立地查看每一行,并查看一行的所有列是否都是true
,这意味着整行由整数组成。因此,我们将找到这些行,并将它们从最终矩阵中删除,以生成所需的结果
因此,我们得到:
>> format long g;
>> B
B =
2 1.5 1
3 1.5 2
2 2.5 1
3 2.5 1
在浮动中使用
==
相当危险,不是吗?例如,你最好不要把B(全部)放在后面@Wolfie如果数字最初是整数,那么比较应该是好的。但是,一旦数字中有浮点数的味道,我们就应该拒绝它。在这种情况下,我可以不做公差比较。如果我将等式与ac进行比较,我只会在公差范围内进行比较实际上是浮点数,但是因为我们想确定一个数字是否是整数,我们可以跳过。这是一个我认为相等的时候,但总的来说你会在一个公差范围内进行比较,正如你所说的。谢谢大家的时间。两个答案看起来很相似,但我几乎会接受第一个。我会我刚刚发布了这个问题的修订版和更具挑战性(我认为)的版本。使用浮动的==
是非常危险的,不是吗?(),你可能会更好地推迟B(全部)(abs(floor(B)-B)@Wolfie如果数字最初是整数,那么比较应该是好的。但是,一旦数字中有浮点数的味道,我们就应该拒绝它。在这种情况下,我可以不做公差比较。如果我将等式与ac进行比较,我只会在公差范围内进行比较实际上是浮点数,但是因为我们想确定一个数字是否是整数,我们可以跳过。这是一个我认为相等的时候,但总的来说你会在一个公差范围内进行比较,正如你所说的。谢谢大家的时间。两个答案看起来很相似,但我几乎会接受第一个。我会我刚刚发布了这个问题的修订版和更具挑战性的版本。