【问题标题】:Find row elements of a matrix using an index matrix with NaN values使用具有 NaN 值的索引矩阵查找矩阵的行元素
【发布时间】:2014-02-03 20:35:23
【问题描述】:

我有以下矩阵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 循环来做到这一点,但到目前为止没有成功,因为在每一行 c 中可能有不同数量的 NaN 值。

如果没有for loops,我们可以这样做吗?

谢谢!

【问题讨论】:

  • 我模糊地想知道您是否应该制作 c 和 B 稀疏矩阵,而不是使用所有这些 NaN。

标签: matlab


【解决方案1】:
 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);

【讨论】:

  • 如果添加B = NaN(size(A)); 行,您就可以准确地找到操作员B。 +1
  • OP 说他已经这样做了,但是还好……更独立。
  • 抱歉没看到
猜你喜欢
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多