我有像A = [NAN 0.9 0.8 0.7;南南0.7 0;南南南南]和
我想告诉MATLAB -
对于A-中的所有列,如果列仅包含NAN,则返回最后一个NAN元素的索引,否则从每列中找到最大值并返回值和索引。
因此,最终我会有以下向量 - 对于该特定示例,值向量= 0.9,0.7,NA和索引向量= 2,3,4。和
我想我可以在for循环中尝试“if else”循环,但我不知道该怎么做。有人可以帮忙吗?
提前致谢。
答案 0 :(得分:4)
您可以使用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.此片段的第3行只查找最大值为NaN的值(即整行为NaN),并将索引替换为行的长度。
答案 1 :(得分:0)
这是简单的蛮力方法。我赞赏阿扎曼先生的技巧。
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