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