2012-10-30 210 views
4

我有一個關於矩陣賦值的問題。matlab條件矩陣賦值

說我有三個矩陣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]) 

我如何寫而無需循環?

非常感謝您的幫助。

+2

你一定要明白在MATLAB是矩陣索引不使用[]?我想象一旦你使用這種語言會導致你一些問題。 – 2012-10-30 03:41:59

回答

5

我認爲丹·貝克是正確的想法,但重新計算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; 
+0

啊,很好的接受 - 我同意這可能是OP的意圖!我應該也許不會在深夜回答這個問題;-) –

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; 
+0

我同意Rody Oldenhuis的回覆。 – Abhinav