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] 谢谢大家!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中的每一个元
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)是否符合炒饭的要求?