【问题标题】:Scan each column without for loop in MATLAB在 MATLAB 中不使用 for 循环扫描每一列
【发布时间】:2015-11-15 16:50:34
【问题描述】:
I = [2 1];
A = [7 11
     8 17];

如何在没有for 循环的情况下在 A 中选择正确的值? IA 中每一列的索引向量。那是I(1) is 8I(2) = 11

【问题讨论】:

    标签: matlab vectorization


    【解决方案1】:

    使用sub2ind 根据正确的行和列坐标生成线性索引,然后使用这些索引到A。在这种情况下,I 选择了正确的行,而您只想为从第一列到最后一列的每一列选择一个元素:

    ind = sub2ind(size(A), I, 1:numel(I));
    out = A(ind);
    

    示例

    >> I = [2 1];
    >> A = [7 11
            8 17];
    >> ind = sub2ind(size(A), I, 1:numel(I));
    >> out = A(ind);
    >> out
    
    out =
    
         8    11
    

    【讨论】:

    • 非常感谢!这正是我希望找到的。
    • @bisherbas 我很高兴。祝你好运!
    • @bisherbas 一个可能更快的替代方案是out = A((0:size(A,1):numel(A)-1)+I)。它与sub2ind 的作用相同,但避免了一些开销
    • @bisherbas Luis 的建议在这里有相关的基准,如果你有兴趣 - stackoverflow.com/a/25530905/3293881
    猜你喜欢
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2020-12-16
    • 2015-04-20
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多