从矩阵中分离元素及其索引

时间:2014-11-18 01:12:39

标签: matlab

我有像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”循环,但我不知道该怎么做。有人可以帮忙吗?

提前致谢。

2 个答案:

答案 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