簡體   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