【发布时间】: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 的第二行是1 和3。所以从A的第二行开始;第 1 列和第 3 列之间的元素应传输到输出矩阵 C。
没有for循环,只有矩阵运算,怎么办?
【问题讨论】:
矩阵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 的第二行是1 和3。所以从A的第二行开始;第 1 列和第 3 列之间的元素应传输到输出矩阵 C。
没有for循环,只有矩阵运算,怎么办?
【问题讨论】:
既然你想要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);
【讨论】: