我有两个3d数组:
A(:,:,1) = [1 2 3; 4 5 6; 7 8 9];
A(:,:,2) = [1 0 0; 0 1 0; 0 0 1];
A(:,:,3) = [3 2 1; 6 5 4; 9 8 7];
...
和
B(:,:,1) = [1 1 1; 2 2 2; 3 3 3];
B(:,:,2) = [1 0 0; 0 1 0; 0 0 1];
B(:,:,3) = [3 3 3; 2 2 2; 1 1 1];
...
它们都由3x3矩阵组成,它们的第三个维度非常大。我想获得两个数组中存在的矩阵数组。我通过比较逐元素(矩阵方式)在for循环中进行。这需要很长时间,所以我正在寻找一种更简单的方法(或现有的功能)来做同样的事情。
谢谢!
答案 0 :(得分:2)
将前两个维度折叠为一个并进行转置,以便3D数组的矩阵成为矩阵的行。这样您就可以使用intersect(...,'rows')
。最后,转回并重新塑造:
[m, n, p] = size(A);
result = intersect(reshape(A, [], p).', reshape(B, [], p).', 'rows');
result = reshape(result.', m, n, []);