0

我正在研究 Matlab 中的一种算法,该算法需要定期更新矩阵的某些元素,并寻找最好的方法。这是我要实现的目标的描述:

  1. 我有一个 MxN 数组A和 1xN 向量B
  2. 基本上,向量B是一个逻辑索引,它描述了我需要选择哪一列,AC = A(:,B)
  3. 不幸的是,逻辑向量B因某些进程而异。这意味着其中的列数C不是固定的。
  4. 其他一些处理将用作输入并生成另一个与ie大小相同的C数组DCsize(D) == size(C)
  5. 现在,我需要“重塑”D以使其具有与A. 棘手的部分是上面#2中没有选择的那些列A需要替换为NaNs。当然,我可以使用循环的粗略方式来做到这一点。但我希望以 Matlab 的方式执行此操作,即线性或逻辑索引、矢量化等。这是我目前陷入困境的地方。

一些让事情更清楚的例子:

让我们说

A = [1 2 3; 4 5 6; 7 8 9] 
B = [1 0 1] 
C = A(:,B) = [1 3; 4 6; 7 9] 

经过一些处理,我会得到D = [2 5; 6 7; 3 3]. 现在,我需要通过ie填充将其“重塑”D为相同的大小。ANaND = [2 NaN 5; 6 NaN 7; 3 NaN 3]

到目前为止我尝试过的,

Atmp = NaN(size(A));
Btmp = find(repmat(B,[size(B,1),1]));
Atmp(Btmp) = D(Btmp); %-> error because D is smaller than A.
4

1 回答 1

2

怎么样

fullD = NaN(size(A));
fullD(:, B) = D;
于 2013-05-21T08:58:27.900 回答