将有界整数数组转换为位数组矩阵

时间:2013-05-26 21:38:06

标签: matlab vectorization

假设我有一个有界整数的数组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循环的矢量化实现。

1 个答案:

答案 0 :(得分:2)

两种可能的方法:

  1. 使用sparse

    A = sparse( 1:n, a, 1, n, max(a(:)) );  
    

    如果你想要一个非稀疏的结果

    full(A);
    
  2. 使用sun2ind

    A = zeros( n, max(a(:)) );
    A( sub2ind(size(A), 1:n, a ) ) = 1;