从满足某些条件的两个 Matlab 向量中提取元素对
Extracting pairs of elements from two Matlab vectors satisfying some criteria
考虑 Matlab 中的三个行向量,A
、B
、C
,每个向量的大小为 1xJ
。我想构建一个大小为 Kx2
的矩阵 D
,列出所有可能的元素对 (a,b)
,这样:
a
是 A
.
的元素
b
是 B
.
的一个元素
a-b
是 C
.
的一个元素
a
和b
不同于Inf
,-Inf
.
例如,
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的那些对来实现=] 条件(例如它们的差异在规定的一组值中)。
考虑 Matlab 中的三个行向量,A
、B
、C
,每个向量的大小为 1xJ
。我想构建一个大小为 Kx2
的矩阵 D
,列出所有可能的元素对 (a,b)
,这样:
的元素a
是A
.
的一个元素b
是B
.
的一个元素a-b
是C
.a
和b
不同于Inf
,-Inf
.
例如,
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的那些对来实现=] 条件(例如它们的差异在规定的一组值中)。