1

私は問題があります。

phi_new と phi_old のような 2D マトリックスの線形インデックス番号を格納する 2 つのマトリックス nbd_new と nbd_old があります。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 が両方とも 2-D 行列であり、行列 C がこの行列の線形インデックス (位置) のセットであることを確認してください。事前にわかりにくかったらすいません。間違ってファイではなくuと書きました。どちらも同じです。

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 に答える