我有以下矩阵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
的情况下执行此操作吗?
谢谢!
答案 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);