Let's say I have a vector b where each row correspond to an index for each row in the matrix A. I want to assign 1 to these elements, like in the matrix C, without loops. Thank you
A = zeros(4,3);
b = [2;1;2;3];
C = [0 1 0; 1 0 0; 0 1 0; 0 0 1]

 採用された回答

Stephen23
Stephen23 2016 年 5 月 30 日
編集済み: Stephen23 2016 年 5 月 30 日

1 投票

You can use sub2ind for this:
>> A = zeros(4,3);
>> col = [2;1;2;3];
>> row = 1:numel(col);
>> A(sub2ind(size(A),row(:),col(:))) = 1
A =
0 1 0
1 0 0
0 1 0
0 0 1

その他の回答 (1 件)

Andrei Bobrov
Andrei Bobrov 2016 年 5 月 30 日

1 投票

C = accumarray([(1:numel(b))' b],1)

カテゴリ

ヘルプ センター および File ExchangeMatrices and Arrays についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by