从满足某些条件的两个 Matlab 向量中提取元素对

Extracting pairs of elements from two Matlab vectors satisfying some criteria

考虑 Matlab 中的三个行向量,ABC,每个向量的大小为 1xJ。我想构建一个大小为 Kx2 的矩阵 D,列出所有可能的元素对 (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

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

如果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)];

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