2012-10-30 175 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