如果我在matlab中有一个向量(数组),是否可以根据某些限制(例如所有非负数)从该向量中删除值。
请告诉我最佳方法。
答案 0 :(得分:4)
是的,您可以使用逻辑索引来保持符合条件的值,也可以使用find
函数来获取包含符合条件的值的索引。
我们想要从矢量中删除不大于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
中的任何元素设置为[]