我正在做一个项目,我需要将结果矩阵转换为更简单的矩阵。更具体地说,对于矩阵中的每一列,我想找到行中的最大值并将其更改为 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新手,希望对你有所帮助。
这是我的程序的结果之一
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))