Matlab - 如何在没有循环的情况下创建逻辑数组矩阵

时间:2016-04-19 02:59:57

标签: matlab

我想做以下事情:

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

有没有办法在没有循环的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

一种解决方案是

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

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

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

答案 1 :(得分:0)

如果您从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。)