假设我有一个有界整数的数组a
(在这种情况下以5为界):
a = [3 4 4 2 1 5 5];
我想将这个整数数组转换为length(a) x 5
矩阵A
,其中每一行都是一个位数组,其列中的1用a
的整数索引:
A = [0 0 1 0 0;
0 0 0 1 0;
0 0 0 1 0;
0 1 0 0 0;
1 0 0 0 0;
0 0 0 0 1;
0 0 0 0 1];
使用for
循环很容易实现:
n = length(a)
A = zeros(n, max(a(:)));
for k = 1 : n
A(k, a(k)) = 1;
end
我正在寻找一个不使用for循环的矢量化实现。
答案 0 :(得分:2)
两种可能的方法:
使用sparse
:
A = sparse( 1:n, a, 1, n, max(a(:)) );
如果你想要一个非稀疏的结果
full(A);
使用sun2ind
:
A = zeros( n, max(a(:)) );
A( sub2ind(size(A), 1:n, a ) ) = 1;