如何检查两个向量是否相同?我尝试使用for
循环和if
语句来执行此操作,但该选项不适合我必须使用的数据量。有没有聪明的方法呢?我想创建一个if
语句,如果我的矩阵中已经没有这样的向量,它只会向矩阵添加一个特定的向量。
例如,如果我的矩阵中有一个向量[1 2 3 1 2]
,我不想在矩阵中添加另一个向量[1 2 3 1 2]
。
答案 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
之前,我不会建议它。否则,第二种方法更方便。