Matlab中提取A、B向量满足差值属于C的元素对的高效实现方法
Matlab高效构造满足条件的元素对矩阵实现
核心实现代码
因为需要多次重复调用,直接封装为函数即可:
function D = find_valid_pairs(A,B,C) % 过滤A、B中的正负无穷,仅保留有限值 A_valid = A(isfinite(A)); B_valid = B(isfinite(B)); % 提前过滤C中的非有限值:有限值的差值不可能为无穷,直接排除减少计算量 C_valid = C(isfinite(C)); % 向量化计算所有a-b的组合矩阵 diff_mat = A_valid.' - B_valid; % 匹配差值属于C_valid的位置,获取对应的行、列索引 [row_idx, col_idx] = find(ismember(diff_mat, C_valid)); % 按行拼接符合条件的(a,b)对,得到结果矩阵 D = [A_valid(row_idx), B_valid(col_idx)]; end
测试示例
输入样例数据:
A=[-3 3 0 Inf -Inf]; B=[-2 2 0 Inf -Inf]; C=[Inf -Inf -1 1 0]; D = find_valid_pairs(A,B,C)
输出结果和参考完全一致:
D = -3 -2 3 2 0 0
性能说明
- 全程使用Matlab优化过的内置向量化操作,无显式嵌套循环,多次调用的运行效率远高于循环实现
- 提前过滤所有无效无穷值,大幅降低后续差值计算、匹配的运算量
- 若数据规模极大(单向量长度超过1e4,差值矩阵内存占用超过可用内存),可以改用基于
containers.Map的哈希匹配方案,普通场景下上述实现为最优选择。
内容的提问来源于stack exchange,提问作者Star
相关产品推荐
相关产品推荐

