我有一个 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 循环的情况下做到这一点?
我有一个 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 循环的情况下做到这一点?
你可以试试这个:
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
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