正确提取数组中非NaN元素的索引和值的方法

时间:2014-01-28 18:35:35

标签: arrays matlab matrix find nan

我有一个带数字和NaN元素的数据数组。我想获得3个带有索引的向量以及该数组中非NaN元素的相应值。

我是这样做的:

[x,y]=find(~isnan(A));
[~,~,z]=find(A(~isnan(A)));

现在,这不是最佳选择。首先,z的大小与xy的大小不同(它是一个较短的元素,我不知道哪个被省略)。其次,我确信可以在一行中做到这两点。

2 个答案:

答案 0 :(得分:3)

您根本不需要第二个find,只需要一些您已使用的逻辑索引:

% Example data
A = rand(5);
A(A>0.5) = NaN;

iA = ~isnan(A);
[x,y] = find(iA);
z = A(iA(:));

答案 1 :(得分:2)

由于您使用第一个命令获得下标,因此无需两次调用findisnan。应用它们以获取A中的值:

[ii,jj] = find(~isnan(A));
z = A(sub2ind(size(A),ii,jj))

如果您反对sub2ind,则可以使用ii+(jj-1)*size(A,1)

如果您以后不需要iijj,则可以A(~isnan(A))获取z(不需要find