1

我有一个 n 大小的向量,我想将其转换为 nxm 的布尔矩阵,其中 m 是该向量中的多个唯一值。

a = repmat(1:5:20,1,3)
a = 
    1 6 11 16 1 6 11 16 1 6 11 16

我想要的结果是矩阵 12x4:

 1 0 0 0 
 0 1 0 0 
 0 0 1 0 
...
 0 0 0 1

任何想法如何在没有 for 循环的情况下做到这一点?

4

2 回答 2

1

你可以试试这个:

a = repmat(1:5:20,1,3);  
b = unique(a);   

bsxfun(@eq, a', b)  

结果将是:

ans =

 1     0     0     0
 0     1     0     0
 0     0     1     0
 0     0     0     1
 1     0     0     0
 0     1     0     0
 0     0     1     0
 0     0     0     1
 1     0     0     0
 0     1     0     0
 0     0     1     0
 0     0     0     1
于 2012-05-07T15:11:46.520 回答
0
a = repmat(1:5:20,1,3)
b=unique(a);
c = repmat(a',1,numel(b))== repmat(b,numel(a),1);

但通常循环会更快,应避免使用 repmat。所以,现在有一个循环:

a = repmat(1:5:20,1,3)
b=unique(a);
c=false(numel(a),numel(b));
for ii=1:numel(a)
    c(ii,:) = a(ii)==b;
end
于 2012-05-07T15:10:20.920 回答