matlab 中的第一个非 NaN 元素值和索引



我想从 matlab 中矩阵的每一列中获取第一个非 NaN 元素的值和索引。

在一个单独的问题中---很少有列没有 NaN。所以在这种情况下 - 我想从每列中提取第一个非 NaN 元素的值和索引,否则如果列不包含 NaN,则提取每列的第一个元素。

有人可以帮忙解决这两个问题吗?

索引很容易获得 max 的第二个输出。可以使用sub2ind或手动计算相应的线性指数从该索引中找到该值。

要在包含所有NaN的列中返回不同的索引,请使用 max 的第一个输出来检测这种情况并更改这些列的结果。

x表示您的矩阵。然后:

[m, index]  = max(~isnan(x), [], 1);
value = x(index + (0:size(x,2)-1)*size(x,1));
        %// or equivalently x(sub2ind(size(x), index, 1:size(x,2)))
index(~m) = size(x, 1); %// return last index for columns that have all NaN

x = [  8    NaN     3    NaN
      NaN     4     5    NaN];

生产

index =
     1     2     1     2
value =
     8     4     3   NaN

最新更新