如何在以下条件下实现矩阵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]
谢谢!
答案 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