我正在开发一个项目,我需要将结果矩阵转换为更简单的矩阵。更具体地说,对于矩阵中的每一列,我想在行中找到最大值并将其更改为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循环从每一行返回最大值,但我不知道如何返回该值的矩阵中的位置并将其余部分转换为零。
这是我的想法
我是Matlab的新手,希望你能提供帮助。
这是我的程序
的结果之一 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栏
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
正确答案是使用bsxfun(@eq,output,max(output))
答案 0 :(得分:5)
答案 1 :(得分:5)
不完全确定你的意思,但
>> bsxfun(@eq, X, max(X,[],2)) % maximum per row
ans =
0 1 0
0 0 1
0 0 1
来吧?如果您指的是每个列的最大值,那么只需使用
即可>> bsxfun(@eq, X, max(X)) % maximum per column
ans =
0 1 0
1 0 1
0 0 0