我有一个带数字和NaN元素的数据数组。我想获得3个带有索引的向量以及该数组中非NaN元素的相应值。
我是这样做的:
[x,y]=find(~isnan(A));
[~,~,z]=find(A(~isnan(A)));
现在,这不是最佳选择。首先,z
的大小与x
和y
的大小不同(它是一个较短的元素,我不知道哪个被省略)。其次,我确信可以在一行中做到这两点。
答案 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)
由于您使用第一个命令获得下标,因此无需两次调用find
或isnan
。应用它们以获取A
中的值:
[ii,jj] = find(~isnan(A));
z = A(sub2ind(size(A),ii,jj))
如果您反对sub2ind
,则可以使用ii+(jj-1)*size(A,1)
。
如果您以后不需要ii
和jj
,则可以A(~isnan(A))
获取z
(不需要find
)