【问题标题】:Get different columns of each row from matrix从矩阵中获取每一行的不同列
【发布时间】:2015-05-18 20:26:21
【问题描述】:

矩阵A = [19,20,30; 41,54,65; 72,83,95]

矩阵B = [2,3; 1,3; 3,3]

输出矩阵C = [20; 30; 41; 54; 65; 95]

矩阵B 包括应将哪些列传输到输出矩阵C。例如B 的第二行是13。所以从A的第二行开始;第 1 列和第 3 列之间的元素应传输到输出矩阵 C

没有for循环,只有矩阵运算,怎么办?

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    既然你想要row-major order (并且Matlab以列的主要顺序工作),请先转置A。然后构建一个逻辑掩码用作A转置的索引:

    At = A.'; %'
    mask = (bsxfun(@ge, (1:size(At,1)), B(:,1)) & bsxfun(@le, 1:size(At,1), B(:,2))).'; %'
    result = At(mask);
    

    【讨论】:

    • 谢谢路易斯。它完美地适用于方阵。但在我的实际研究中,A 不是方阵。所以它返回“输入必须具有相同的大小”。错误。
    • @oarar 已更正。请立即尝试
    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 2016-07-09
    • 2013-11-30
    • 2020-03-18
    • 2012-11-20
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多