2013-05-26 93 views
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循環的向量化實現。

回答

3

兩種可能的方法:

  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; 
    
+0

感謝您提供快速響應和多種解決方案。 – countfromzero