gpt4 book ai didi

matlab - 在 MATLAB 中为不同矩阵中的每一行应用相交

转载 作者:行者123 更新时间:2023-12-02 08:19:00 26 4
gpt4 key购买 nike

我有两个大矩阵,我想在这些矩阵的每一行之间执行相交运算。我会得到类似的东西:

a =

8 1 6
3 5 7
4 9 2

b =

8 3 4
1 5 9
6 7 2

intersect(a,b) =

8
5
2

不使用 for 循环对 A 和 B 的所有 n 行进行相交。可能吗?

最佳答案

这是使用 broadcasting/bsxfun 的矢量化方法-

b_mask = squeeze(any(bsxfun(@eq,a,permute(b,[1,3,2])),2));
bt = b.';
out = mat2cell(bt(b_mask'),sum(b_mask,2));

sample 运行-

a =
8 1 6
3 5 7
4 9 2
b =
3 8 2 6 1
5 6 9 0 3
6 7 1 5 3
out{1} =
8
6
1
out{2} =
5
3
out{3} =
[]

请注意,对于 b 中连续出现重复数字的情况,这不会工作,因为在这些情况下,它会从 b 中取出重复数字 在输出中。这可能不是预期的,因为我们正在执行提供唯一数字的 intersect 操作。

为了使其适用于重复元素,我们需要修改 b_mask 的创建,保持原样。所以,修改后的版本看起来像这样 -

matches0 = bsxfun(@eq,a,permute(b,[1,3,2]));
[~,maxidx] = max(matches0,[],3);
matches1 = bsxfun(@eq,permute(1:size(b,2),[1,3,2]),maxidx) & matches0;
b_mask = squeeze(any(matches1,2));

sample 运行-

a =
8 8 1
3 5 7
4 9 2
b =
3 8 1 8 5
5 6 9 0 3
6 7 1 5 3
out{1} =
8
1
out{2} =
5
3
out{3} =
[]

关于matlab - 在 MATLAB 中为不同矩阵中的每一行应用相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com