matlab - 在 MATLAB 中创建最大值索引矩阵

标签 matlab matrix max

使用 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/

相关文章:

matlab - 如何使字体可用于 Matlab R2013a 中的 LaTeX 解释器?

image-processing - 实时 Cuda 图像处理建议

mysql - 如何在 MySQL 中存储距离矩阵?

python - 使用 python 在列表中查找最大 (max) 文本项

windows - 表单大小调整和最大化

mysql - 选择总和,其中总和

matlab - 从 udp() 对象编码任意长度的二进制数据

performance - 从具有增强性能的文本文件中删除重复出现的行

matlab - 如何改进此代码以从 MATLAB 中的另一个矩阵替换矩阵的元素?

python - 在python中计算大数据集相似度矩阵的有效方法