更改2D数组中的某些元素

时间:2013-05-21 08:54:36

标签: matlab

我正在使用Matlab中的算法,该算法要求定期更新矩阵的某些元素,并查看如何最好地执行此操作。这是我想要实现的目标的描述:

  1. 我有一个MxN数组A和1xN向量B
  2. 基本上,向量B是一个逻辑索引,用于描述我需要选择A的哪一列,即C = A(:,B)
  3. 不幸的是,逻辑向量B因某些进程而异。这意味着C中的列数不固定。
  4. 其他一些处理将使用C作为输入,并生成另一个与D大小相同的数组C,即size(D) == size(C)
  5. 现在,我需要“重塑”D,使其与A的大小相同。棘手的部分是A中未在#2中选择的那些列需要被NaN替换。当然,我可以使用循环的粗略方式。但我希望用Matlab方式做这个,即线性或逻辑索引,矢量化等等。这就是我现在陷入困境的地方。
  6. 使事情更清晰的一些例子:

    让我们说

    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}}

1 个答案:

答案 0 :(得分:2)

怎么样

fullD = NaN(size(A));
fullD(:, B) = D;