1

我有个问题。

我有两个矩阵 nbd_new 和 nbd_old,它们存储像 phi_new 和 phi_old 这样的 2D 矩阵的线性索引号。phi_old 和 phi_new 的大小相同。我需要做的是计算集合 nbd_new 中但不在集合 nbd_old 中的所有位置。然后对于每个这样的位置,我必须以这种方式更新 phi_new:如果该位置的 phi_old 大于 0,则将 phi_new 放在该位置 = width+1 否则将 phi_new 放在该位置 = -(width+1)

我写了这样的代码:

    C = setdiff(nbd_new,nbd_old);
    for k=1:length(C)
        if phi_old(C(k))>0
            phi_new(C(k))=(width+1);
        else
            phi_new(C(k))=-(width+1);
        end
    end

此代码有效,但由于循环和 if-then-else 语句而非常慢。这段代码可以进一步优化吗?

提前谢谢大家!!

编辑:请检查 phi_old 和 phi_new 是否都是二维矩阵,矩阵 C 是该矩阵的线性索引(位置)的集合。如果我事先不清楚,我很抱歉。错误地,我写了 u 而不是 phi。两者都是一样的。

4

1 回答 1

3

不需要循环,使用逻辑索引

phi_new = zeros(size(phi_old)); % preallocate memory
phi_new(C(phi_old(C)>0)) =   (width+1);
phi_new(C(phi_old(C)<0)) = - (width+1);
于 2013-09-05T16:42:45.920 回答