比较两个向量是否相同

时间:2016-10-14 23:39:00

标签: matlab vector compare

如何检查两个向量是否相同?我尝试使用for循环和if语句来执行此操作,但该选项不适合我必须使用的数据量。有没有聪明的方法呢?我想创建一个if语句,如果我的矩阵中已经没有这样的向量,它只会向矩阵添加一个特定的向量。

例如,如果我的矩阵中有一个向量[1 2 3 1 2],我不想在矩阵中添加另一个向量[1 2 3 1 2]

3 个答案:

答案 0 :(得分:2)

你也可以使用isequal函数

A1 = [1 5 6];
A2 = [1 4 3];
A3 = [1 1 1];

result = isequal(A1,A2,A3)

但是如果你的一个元素是NAN,则isequal总是返回0(false)

答案 1 :(得分:1)

仅检查2个向量是否相等,可以在向量上使用==运算符,然后使用all( )检查返回的逻辑数组的每个元素是否为true。评论中的Andras Deak链接有一些很好的方法可以在更大的集合中找到一个向量。

v1 = [1 2 3 1 2];
v2 = [1 2 3 1 2];
returnsTrue = all(v1 == v2);

答案 2 :(得分:1)

关于比较两个向量的问题,您可以使用isequal

tf = isequal(vec1, vec2);

但据我所知,每个向量(vec)将成为最终矩阵(Mat)中的一行,并且您希望保持Mat行唯一。如果是这样,有两种方法可以做到:

首先是在添加行之前检查。为此目的使用ismember

tf = ismember(vec, Mat, 'rows'); % it gives you true if vec is a row in Mat

或者您可以在不检查的情况下插入所有向量,最后收集unique行:

Mat = unique(Mat, 'rows');

我应该选择哪一个?

如果你有一个很大的Mat和/或你想为它添加许多vec,这个问题是相关的。在这种情况下,如果vec很可能已经是Mat中的一行,就像元素只能在有限范围内的整数那样,第二种方法可能会导致非常大{{1}在你Mat之前,我不会建议它。否则,第二种方法更方便。