1
MATLABでは、行インデックスに等しい値を1に置き換え、他の値を0に置き換える行列のエントリを置き換えます。例えばMatlabの行列エントリをその値とそのインデックスに基づいて置き換えます
A = [3 1 4
2 2 5
1 3 3];
と私は
B = [0 1 0
1 1 0
0 1 1];
を持ちたいので効率的に行うための方法はありますか?
MATLABでは、行インデックスに等しい値を1に置き換え、他の値を0に置き換える行列のエントリを置き換えます。例えばMatlabの行列エントリをその値とそのインデックスに基づいて置き換えます
A = [3 1 4
2 2 5
1 3 3];
と私は
B = [0 1 0
1 1 0
0 1 1];
を持ちたいので効率的に行うための方法はありますか?
ビットより一般的な:R2016b前
MATLAB:
B = bsxfun(@eq, A, (1:size(A,1)).');
MATLAB R2016b以降:
B = (A == (1:size(A,1)).');
k = size (A) ;
for i = 1 : k(1)
for j = 1 : k(2)
if (A(i,j) == i)
A(i,j) = 1;
else
A(i,j) = 0 ;
end
end
end
stewieの提案ごとなどの代替:
bsxfun (@eq, A, [1,1,1;2,2,2;3,3,3])
@StewieGriffin:私は彼の質問を正しく読まなかったのは間違いでした。しかし、私は答えにあなたの提案に基づいていくつかのコードを追加しました。ありがとう – User1551892