首页 > 解决方案 > 从满足某些条件的两个 Matlab 向量中提取元素对

问题描述

考虑 Matlab 中的三个行向量,ABC,每个向量的大小为1xJ。我想构建一个D大小矩阵,Kx2列出每个可能的元素对,(a,b)例如:

例如,

A=[-3 3 0 Inf -Inf];
B=[-2 2 0 Inf -Inf];
C=[Inf -Inf -1 1 0];
D=[-3 -2;  %-3-(-2)=-1
    3 2;   % 3-2=1
    0 0];  % 0-0=0

我希望这段代码高效,因为在我的真实示例中,我必须重复多次。

标签: arraysmatlab

解决方案


如果J不是太大,以至于您可以负担两个最大大小为J×的中间矩阵J,这可以以向量化方式完成,这通常意味着它会很快:

A = [-3 3 0 Inf -Inf];
B = [-2 2 0 Inf -Inf];
C = [Inf -Inf -1 1 0];
[a, b] = ndgrid(A(~isinf(A)), B(~isinf(B)));
ind = ismember(a-b, C);
result = [a(ind) b(ind)];

这通过生成满足单个条件(例如有限)的所有对,然后选择满足联合条件的那些对(例如它们的差异在规定的一组值中)来工作。


推荐阅读