繁体   English   中英

MATLAB 3D数组的交集

[英]MATLAB intersection of 3d arrays

我有两个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循环中通过比较按元素(按矩阵)进行操作。 这需要很长时间,因此我正在寻找一种更简单的方法(或现有功能)来执行此操作。

谢谢!

将前两个维折叠为一个并进行转置,以便3D数组的矩阵成为矩阵的行。 这样,您可以使用intersect(...,'rows') 最后,移回并重新调整形状:

[m, n, p] = size(A);
result = intersect(reshape(A, [], p).', reshape(B, [], p).', 'rows');
result = reshape(result.', m, n, []);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM