我想从 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