4

行列代入について質問があります。

3 つの行列 A、B、C があり、規則に従って行列 C の要素を A と B の要素に割り当てたいとします。

  C[i,j] = A[i,j] if abs(C[i,j] - A[i,j]) < abs(C[i,j] - B[i,j])
  C[i,j] = B[i,j] if abs(C[i,j] - A[i,j]) > abs(C[i,j] - B[i,j])
  C[i,j] = 0  if abs(C[i,j] - A[i,j]) == abs(C[i,j] - B[i,j])

forループなしでどうやって書くことができますか?

どうもありがとうございました。

4

2 に答える 2

5

Dan Beckerは正しい考えを持っていると思いますが、再計算して、元の行列ではなく、更新された行列が比較されることabs(C-B)abs(C-A)意味します。

私はこれがあなたが望むものではないと思うので、ここに彼の方法の修正されたバージョンがあります:

CmA = abs(C-A);
CmB = abs(C-B);

ind = Cma < CmB; C(ind) = A(ind);
ind = CmA > CmB; C(ind) = B(ind);
C(CmA == CmB) = 0;
于 2012-10-30T05:33:03.813 に答える
1

私はあなたが次のことを望んでいると思います:

ind = abs(C - A) < abs(C - B) ; C(ind) = A(ind);
ind = abs(C - A) > abs(C - B) ; C(ind) = B(ind);
ind = abs(C - A) == abs(C - B) ; C(ind) = 0;
于 2012-10-30T05:13:19.923 に答える