我正在使用Matlab中的算法,该算法要求定期更新矩阵的某些元素,并查看如何最好地执行此操作。这是我想要实现的目标的描述:
A
和1xN向量B
。 B
是一个逻辑索引,用于描述我需要选择A
的哪一列,即C = A(:,B)
。B
因某些进程而异。这意味着C
中的列数不固定。 C
作为输入,并生成另一个与D
大小相同的数组C
,即size(D) == size(C)
D
,使其与A
的大小相同。棘手的部分是A
中未在#2中选择的那些列需要被NaN
替换。当然,我可以使用循环的粗略方式。但我希望用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]
。现在,我需要使用D
A
填充NaN
,将D = [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.
相同的大小。
到目前为止我尝试过的,
{{1}}
答案 0 :(得分:2)
怎么样
fullD = NaN(size(A));
fullD(:, B) = D;