我想从matlab中矩阵的每一列获得第一个非NaN元素的值和索引。
在一个单独的问题中---很少有列没有NaN。所以在那种情况下 - 我想从每列提取第一个非NaN元素的值和索引,如果列不包含NaN,则提取每列的第一个元素。
有人可以帮助解决这两个问题吗?
答案 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