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 に答える