使用具有NaN值的索引矩阵查找矩阵的行元素

时间:2014-02-03 12:03:28

标签: matlab

我有以下矩阵c = [1 2 NaN;2 NaN 1;4 1 NaN;3 NaN NaN]和另一个矩阵A = [ 16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1 ]。我们初始化矩阵B=nan(size(A))。我想使用c的每一行作为A每行的索引,并将结果存储在B的相应元素中。例如,对于c(1,:) = [1 2 NaN]和B(1,:) = [16 2 NaN NaN ],c(4,:) = [3 NaN NaN]和B(4,:) = [NaN NaN 15 NaN] ;

我认为可能的解决方案是:

B= nan(size(A));
for i=1:size(A,1)
    B(i,c(i,~isnan(c(i,:)))) = A(i,c(i,~isnan(c(i,:)))) ;
end

我正在尝试使用for for循环,但到目前为止没有成功,因为c的每一行可能有不同数量的NaN值。

我们可以在没有for loops的情况下执行此操作吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

 c(isnan(c))=0;  %better not to use NaNs in the first place?

 [I,~,J]=find(c);

 idx=sub2ind(size(A),I,J);

 B = NaN(size(A));

 B(idx)=A(idx);