【问题标题】:Matlab - How to create logical array matrix without looping [duplicate]Matlab - 如何在不循环的情况下创建逻辑数组矩阵[重复]
【发布时间】:2016-04-19 02:59:57
【问题描述】:

我想做如下的事情:

Y = [1; 2; 3];
X = repmat(1:10, 3, 1);
for i=1:3
    X(i,:) = X(i,:) == Y(i);
end

所以我最终得到了

X =

     1     0     0     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0     0     0
     0     0     1     0     0     0     0     0     0     0

有没有办法在不循环的情况下做到这一点?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果从1:10向量开始,使用bsxfun

    Y = [1; 2; 3];
    X = bsxfun(@eq, Y, 1:10);
    

    否则repmat:

    Y = [1; 2; 3];
    X = repmat(1:10, 3, 1);
    X = repmat(Y, 1, size(X,2)) == X;
    

    (或 leo 建议的 ones。)

    【讨论】:

      【解决方案2】:

      一个解决方案是

      Y = [1; 2; 3];
      X = repmat(1:10, 3, 1);
      Z = X == (Y * ones(1, 10)) ;
      

      但我不确定这是否更快。不过它不使用循环:)

      编辑:您可以使用 repmat 而不是 * 个 (1, 10)

      【讨论】:

        猜你喜欢
        • 2019-12-06
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        • 2020-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多