根据限制从矢量中删除值

时间:2014-05-26 21:18:49

标签: matlab

如果我在matlab中有一个向量(数组),是否可以根据某些限制(例如所有非负数)从该向量中删除值。

请告诉我最佳方法。

2 个答案:

答案 0 :(得分:4)

是的,您可以使用逻辑索引来保持符合条件的值,也可以使用find函数来获取包含符合条件的值的索引。

logical indexing

the find function

我们想要从矢量中删除不大于3的所有值的逻辑索引的示例:

>> x=[1,2,3,4,5,6]
x =
     1     2     3     4     5     6
>> x=x(x>3) 
x =
     4     5     6

您也可以按照预期要求多个条件。在下面的示例中,我们希望保留每个大于3但不是5的值。

>> x=[1,2,3,4,5,6]
x =
     1     2     3     4     5     6
>> x=x(x>3 & x~=5)
x =
     4     6

最后,当您需要符合条件的值索引时,find函数可以派上用场。

>> x=[1,1,2,2,5,5]
x =
     1     1     2     2     5     5
>> ind=find(x>3)
ind =
     5     6

逻辑索引和find也可以应用于具有多个行/列的矩阵。 感谢@Alan帮助我改进答案。

答案 1 :(得分:2)

您可能需要查看logical indexing,因为它会整齐地处理您的问题。

要使用您提供的示例,如果您有数字a向量,并且要删除所有负数,则可以执行以下操作:

b = a(a >= 0);

会创建仅包含b的正元素的向量a,或者您可以尝试:

a(a < 0) = [];

会将向量a中的任何元素设置为[]