1

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

4

1 回答 1

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;
    
于 2013-05-26T21:43:30.633 回答