我想知道是否有一个matlab函数检查两个矩阵是否具有相同的元素,这些元素不一定是有序的。
示例:A = [1,2,3],B = [3,2,1]
函数isequal(A,B)返回0,但我想要的是一个函数或代码将返回1.我知道我可以遍历矩阵,但我想知道是否有更快的方法来执行它。谢谢,
答案 0 :(得分:2)
矢量的简单方法可能是
isequal(sort(A), sort(B))
对于矩阵使用
isequal(sort(A(:)), sort(B(:)))
但是,对于大型矩阵,排序可能会很慢。
答案 1 :(得分:1)
这取决于您是否要处理与单个项目相同数量的多次出现(多集方法)或不处理(设置方法):
[1, 2, 3]
和[1, 2, 3, 3]
是否相同(设置方法)与否(多方法)?
正如reverse_engineer所建议的那样:
f_xor = @(x, y) isempty(setxor(x, y))
H. Muster的方法的一组变体:
f_sortu = @(x, y) isequal(sort(unique(x(:))), sort(unique(y(:))))
根据H.Muster的建议:
f_sort = @(x, y) isequal(sort(x(:)), sort(y(:)))
此处有各个变体的时间安排。
>> A = rand(1, 1000);
>> B = A; B(end) = B(end) - 1; % Make vectors almost equal
>> N = 10000;
>> tic; for i = 1 : N; f_sort(A, B); end; toc/N
ans =
1.6892e-04
>> tic; for i = 1 : N; f_sortu(A, B); end; toc/N
ans =
3.5647e-04
>> tic; for i = 1 : N; f_xor(A, B); end; toc/N
ans =
5.4098e-04
设置方法较慢,因为它们需要删除重复项。有趣的是,setxor
比使用sort
+ unique
慢。
答案 2 :(得分:0)
最有效的方法是检查setxor
的空虚:
isempty(setxor(set1,set2))
不确定这是否比sort
选项快......
答案 3 :(得分:-1)
尝试
setdiff(A,B)
这几乎与你寻求的相反。