【问题标题】:segregating elements and its index from matrix从矩阵中分离元素及其索引
【发布时间】:2014-11-18 01:12:39
【问题描述】:

我的矩阵类似于 A=[NAN 0.9 0.8 0.7;南南 0.7 0; NAN NAN NAN NAN] 和

我想告诉 MATLAB-

对于 A 中的所有列,如果列仅包含 NAN,则返回最后一个 NAN 元素的索引,否则从每列中找到最大值并返回值和索引。

因此,最终我将拥有像- 对于此特定示例,值向量 = 0.9,0.7,NA 和索引向量 = 2、3、4。和

我想我可以在 for 循环中尝试“if else”循环,但我不知道该怎么做。任何人都可以帮忙吗?

提前致谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以使用max 轻松做到这一点:

    A = [NaN 0.9 0.8 0.7; NaN NaN 0.7 0; NaN NaN NaN NaN];
    [max_val,max_ind] = max(A,[],2);
    max_ind(isnan(max_val)) = size(A,2);
    

    max的第二个输出是最大值的索引。默认情况下,它将忽略 NaN 值,除非每个值都是 NaN,在这种情况下它返回 1。此 sn-p 的第 3 行仅查找最大值为 NaN 的值(即整行为 NaN),并替换索引与行的长度。

    【讨论】:

    • 非常感谢您的帮助。
    【解决方案2】:

    这是简单的蛮力方法。我为 MrAzzaman 的技巧喝彩。

    for j = 1:size(A,2)
        if sum(isnan(A(:,j))) == size(A,1)
            valueVec(j) = NaN;
            indexVec(j) = size(A,1);
        else
            [valueVec(j),indexVec(j)] = max(A(:,j));
        end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多