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

时间:2016-03-21 01:21:55

标签: matlab

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

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

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

1 个答案:

答案 0 :(得分:3)

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