在八度,我有一個向量與索引例如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;
在八度,我有一個向量與索引例如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;
假設:
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));
更多比我想象的複雜,但有效。 – user1406177
很好的答案。國際海事組織,下面是一個簡單的'完整(稀疏(1:numel(a),a,1))'。 –
@ 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
您也可以像這樣索引到一個單位矩陣。
a = [ 1 2 3 1 2 3];
I = eye(max(a));
m = I(a, :);
在你的具體情況下你可以做[[eye(3);眼睛(3)]' – Dan
這是真的,但也可能是'a = [1 1 3 2 1 3]' – user1406177
可能的重複[從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) –