如果两个矩阵中的值相同,请将值保留在第一个矩阵中

时间:2013-11-25 21:11:59

标签: matlab

如何在以下条件下实现矩阵C: A(i,j)是任何B(k),则A(i,j)= B(k) 否则A(i,j)= 0

示例:

A = [1 0 3 6 3 4; 2 0 3 1 8 2]; B = [1; 2; 3];

C = [1 0 3 0 3 0; 2 0 3 1 0 2]

谢谢!

5 个答案:

答案 0 :(得分:2)

A.*ismember(A,B)

嗯,没有多少解释,ismember完全符合你的条件。因此,对于要复制的所有值,ismember(A,B)为1。

答案 1 :(得分:1)

如果您担心的是避免产品,可以尝试:

A(~ismember(A,B))=0;

答案 2 :(得分:0)

取决于您要查找的内容,来自matlab文档

[LIA,LOCB] = ismember(A,B)也返回一个包含的数组LOCB     B中每个元素的最高绝对指数     B和0如果没有这样的索引。

 a = [9 9 8 8 7 7 7 6 6 6 5 5 4 4 2 1 1 1]
 b = [1 1 1 3 3 3 3 3 4 4 4 4 4 9 9 9]

 [lia1,locb1] = ismember(a,b)
 % returns
 lia1 = [1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1]
 locb1 = [16 16 0 0 0 0 0 0 0 0 0 0 13 13 0 3 3 3]

答案 3 :(得分:0)

另一种可能性,没有ismember

A .* any(bsxfun(@eq, A, permute(B,[3 2 1])),3)

答案 4 :(得分:-1)

谢谢你们!

我按照你的建议并为我的任务扩展了代码。我想我的问题不清楚: 根据您的建议,Matrix C将只提供1或0。 我需要A中的实际值。 在我的下面的解决方案中,代码最后重写了A.我认为有许多更智能的解决方案,但它确实有效。

A = [1 0 3 6 3 4; 2 0 3 1 8 2]; 
B = [1;2;3];
[N M] = size (A);
C = ismember(A,B);


for i = 1:N
for j = 1:M
    if C(i,j) == 0;
        A(i,j) = 0;
    end
end
end