【问题标题】:Extracting pairs of elements from two Matlab vectors satisfying some criteria从满足某些条件的两个 Matlab 向量中提取元素对
【发布时间】:2021-11-27 12:47:02
【问题描述】:

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

  • aA 的一个元素。

  • bB 的一个元素。

  • a-bC 的一个元素。

  • abInf-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

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

【问题讨论】:

    标签: arrays matlab


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多