【问题标题】:MATLAB intersection of 3d arrays3d 数组的 MATLAB 交集
【发布时间】:2015-06-30 19:32:59
【问题描述】:

我有两个 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 循环中进行操作。这需要很长时间,所以我正在寻找一种更简单的方法(或现有功能)来做同样的事情。

谢谢!

【问题讨论】:

  • 你在乎订单吗?如果没有,您可以通过按字典顺序沿第三维对 A 和 B 进行排序来降低算法的计算复杂度。

标签: arrays matlab matrix


【解决方案1】:

将前两个维度合并为一个并转置,使 3D 数组的矩阵成为矩阵的行。这样你就可以使用intersect(...,'rows')。最后,转回并重新整形:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多