結果マトリックスをより単純なマトリックスに変換する必要があるプロジェクトに取り組んでいます。より具体的には、マトリックスの各列について、行の最大値を見つけて1に変更し、残りの値を0に変更したい.この質問を検索する方法がわからないので、投稿することにしましたここです。
たとえば、行列 X があります。
X = [2 8 4; 7 3 9;1 2 3];
X = 2 8 4
7 3 9
1 2 3
この行列を次のように変換したい
X' = 0 1 0
1 0 1
0 0 0
for ループを使用して各行から最大値を返す方法しか知りませんが、その値のマトリックス内の位置を返し、残りをゼロに変換する方法がわかりません。
これが私の考えです
- 最初に新しい同じ次元のゼロ行列を作成します
- 行の最大値を見つける
- 最大値の位置を見つける
- 値 1 を新しい行列の同じ位置に割り当てます
- forループで2と3を繰り返す
私はMatlabを初めて使用します。助けていただければ幸いです。
これが私のプログラムの結果の1つです
2.0680 17.7410 0.8992 -3.0221
3.6093 7.3443 6.7442 0.9874
-0.9095 -3.3220 -1.4857 -0.0023
-1.1753 -16.7906 0.3672 3.7697
-1.6856 -6.0929 -2.8614 0.5054
1.0794 3.8352 1.9894 0.1686
-0.4584 -0.3923 -1.2525 -0.4761
そして、この行列変換を
0 1 0 0
1 0 1 0
0 0 0 0
0 0 0 1
0 0 0 0
0 0 0 0
0 0 0 0
したがって、 max() が機能しない理由は、マトリックス内に負の値があるためだと思います
max() カラム 1 から 5 で wotk しない他の例
0.3816 23.2243 19.6435 23.2243 -3.1993
3.8674 8.0762 6.0563 8.0762 1.8475
-0.4442 -4.0758 -3.4244 -4.0758 0.2073
0.7639 -22.3618 -19.1365 -22.3618 3.9892
-1.8128 -6.4602 -5.1011 -6.4602 -0.4536
0.2954 3.5886 3.1529 3.5886 -0.1403
-0.3723 0.8057 0.6607 0.8057 -0.5173
列 5 から 10
1.4814 19.6435 3.3100 23.2243 1.4814
7.0255 6.0563 6.5251 8.0762 7.0255
-1.1483 -3.4244 -1.1448 -4.0758 -1.1483
-0.7784 -19.1365 -2.3904 -22.3618 -0.7784
-3.8880 -5.1011 -3.7437 -6.4602 -3.8880
1.0289 3.1529 0.7994 3.5886 1.0289
-0.3723 0.8057 0.6607 0.8057 -0.5173
11列目から15列目
21.3957 19.6435 1.4814 0.3816 -3.1993
8.5765 6.0563 7.0255 3.8674 1.8475
-4.0793 -3.4244 -1.1483 -0.4442 0.2073
-20.7498 -19.1365 -0.7784 0.7639 3.9892
-6.6046 -5.1011 -3.8880 -1.8128 -0.4536
3.8181 3.1529 1.0289 0.2954 -0.1403
0.4994 0.6607 -0.5829 -0.3723 -0.5173
16列目から20列目
-1.7736 9.5635 20.0251 1.8072 0.3816
1.6114 7.0884 9.9237 3.6313 3.8674
-0.0058 -2.3835 -3.8685 -0.6572 -0.4442
2.1941 -8.7540 -18.3726 -1.0312 0.7639
-0.5815 -4.5430 -6.9138 -1.9407 -1.8128
0.1232 2.4470 3.4483 0.5589 0.2954
-0.3588 -0.2377 0.2884 -0.2138 -0.3723
正解は use bsxfun(@eq, output, max(output)) です