【问题标题】:changing certain elements in a 2D array更改二维数组中的某些元素
【发布时间】:2013-05-21 08:54:35
【问题描述】:

我正在 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 中选择的那些列需要替换为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]。现在,我需要通过填充NaN,即D = [2 NaN 5; 6 NaN 7; 3 NaN 3],将D“重塑”成与A相同的大小。

到目前为止我已经尝试过,

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    怎么样

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

    【讨论】:

    • 效果很好。我知道这一定是非常简单的事情,但我一直在努力解决这个问题。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多