从矩阵中获取每行的不同列

3

矩阵 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 的第二行开始;应将位于第一和第三列之间的元素传输到输出矩阵 C

如何在不使用循环的情况下,仅通过矩阵运算实现此操作?

1个回答

3

由于您需要行优先顺序(而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);

谢谢Luis。它对于方阵完美地工作。但在我的实际研究中,A不是一个方阵。因此它返回了“输入必须具有相同的大小”错误。 - oarar
@oarar 已经更正。请现在尝试。 - Luis Mendo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接