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

Matlab 如果两个矩阵中的值相同,则将值保留在第一个矩阵中,matlab,Matlab,如何在以下条件下实现矩阵C: A(i,j)是任意的B(k),那么A(i,j)=B(k) 否则A(i,j)=0 例如: A=[103634;20318182]; B=[1;2;3] C=[103030;20310102] 谢谢大家! A.*ismember(A,B) 没什么好解释的,ismember正好适合你的情况。因此,ismember(A,B)对于您要复制的所有值都是1。根据您要查找的内容,请参阅matlab文档 [LIA,LOCB]=ismember(A,B)还返回一个包含 A中的每一个元

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

例如:

A=[103634;20318182]; B=[1;2;3]

C=[103030;20310102]

谢谢大家!

A.*ismember(A,B)

没什么好解释的,ismember正好适合你的情况。因此,
ismember(A,B)
对于您要复制的所有值都是1。

根据您要查找的内容,请参阅matlab文档

[LIA,LOCB]=ismember(A,B)还返回一个包含 A中的每一个元素的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]
谢谢你们

我遵照你的建议,为我的任务扩展了代码。我想我的问题不清楚: 按照您的建议,矩阵C将只给出1或0。 我需要其中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

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

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

另一种可能,没有
ismember

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

我认为Daniel的解决方案也是一样的,至少在这个例子中是这样。几乎和我的解决方案一样<代码>C=成员(A,B);A=A.*C相同且更快。您注意到运算符“*”中的点了吗?因此d=[0,b];a=d(locb1+1)是否符合炒饭的要求?