arrays - 从满足某些条件的两个 Matlab 向量中提取元素对
问题描述
考虑 Matlab 中的三个行向量,A
,B
,C
,每个向量的大小为1xJ
。我想构建一个D
大小矩阵,Kx2
列出每个可能的元素对,(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)];
这通过生成满足单个条件(例如有限)的所有对,然后选择满足联合条件的那些对(例如它们的差异在规定的一组值中)来工作。
推荐阅读
- javascript - Expressjs 如何决定调用哪个错误处理程序。如果我们有多个错误句柄
- mysql - 当数据库更改时,socket.io 中的值不会更新
- java - Java RegEx doesn't replaceAll
- variables - 关于“set”的命名建议
- css - 为什么带有内容的 ::before 伪元素在“display:flex”容器中只去除了前导空格?
- android - isHardwareAccelerated() 总是返回 false
- android - 应用程序崩溃一次替换 Fragment for scoped ViewModel
- scala - databricks scala 在 if 循环之外调用变量
- angular - 更新可观察结果
- sapui5 - “未捕获的 TypeError:sap.ui.require.toUrl 不是函数”