在Matlab中将具有重复值的矢量转换为矩阵

时间:2012-05-07 14:54:59

标签: matlab vector matrix boolean sparse-matrix

我有一个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循环的任何想法如何做到这一点?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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