使用 MATLAB ,我有一个大小为 8 行 x N 列的值数组。我需要创建一个相同大小的矩阵,计算每列中的最大值,并将 1 放入包含最大值的单元格中,将 0 放入其他位置。
一个小例子。假设我们有一组值 D:
D =
0.0088358 0.0040346 0.40276 0.0053221
0.017503 0.011966 0.015095 0.017383
0.14337 0.38608 0.16509 0.15763
0.27546 0.25433 0.2764 0.28442
0.01629 0.0060465 0.0082339 0.0099775
0.034521 0.01196 0.016289 0.021012
0.12632 0.13339 0.11113 0.10288
0.3777 0.19219 0.005005 0.40137
那么,这样的矩阵 D 的输出矩阵将是:
0 0 1 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
1 0 0 1
有没有一种方法可以做到这一点,而无需从 max
函数中捕获索引向量,然后使用 for 循环将它们放在正确的位置?
最佳答案
一行回答:
M = D==repmat(max(D),size(D,1),1)
或更优雅:
M = bsxfun(@eq, D, max(D))
更新:
根据评论,如果你想安全起见,捕获意外的非唯一最大值,添加以下语句:
M( cumsum(M)>1 ) = false
这将确保在有多个最大值的情况下,只有第一个出现的最大值在输出矩阵中有相应的值(这等同于 max()
函数返回索引的行为) .
关于matlab - 在 MATLAB 中创建最大值索引矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081412/