2015-01-07 38 views
0

在八度,我有一個向量與索引例如a = [ 1 2 3 1 2 3]。我現在想要矩陣m = zeros(size(a,2), max(a))有一個取決於向量a:填充矩陣與1取決於載體

m = 
[1 0 0 
0 1 0 
0 0 1 
1 0 0 
0 1 0 
0 0 1] 

我該怎麼做?

我想這一點,但沒有奏效:m(a,:) = 1;

+0

在你的具體情況下你可以做[[eye(3);眼睛(3)]' – Dan

+0

這是真的,但也可能是'a = [1 1 3 2 1 3]' – user1406177

+1

可能的重複[從m大小的列索引向量中創建一個由0和1組成的m矩陣](http://stackoverflow.com/questions/10665179/creating-an-m-by-n-matrix-of-0s-and-1s-from-m-sized-vector-of-column-indexes) –

回答

3

假設:

a = [1 2 3 1 2 3]; 
sz = [numel(a), max(a)]; 

使用sub2ind:使用

m = zeros(sz); 
ind = sub2ind(sz, 1:sz(1), a); 
m(ind) = 1; 

sparse

m = full(sparse(1:sz(1), a, 1)); 
+0

更多比我想象的複雜,但有效。 – user1406177

+1

很好的答案。國際海事組織,下面是一個簡單的'完整(稀疏(1:numel(a),a,1))'。 –

+0

@ user1406177看看這個重複問題的最後一個答案:http://stackoverflow.com/questions/10665179/creating-an-m-by-n-matrix-of-0s-and-1s-from-m-sized -vector-of-column-indexes它使用Octave中的廣播,而Matlab沒有,並且簡單得多。不過,我建議不要使用這種方法,因爲您將刪除與Matlab的兼容性,即使它與您現在似乎無關,也可能值得保留,因爲它使您的代碼可移植。 – Dan

0

您也可以像這樣索引到一個單位矩陣。

a = [ 1 2 3 1 2 3]; 

I = eye(max(a)); 
m = I(a, :);