2014-01-09 49 views
0

在MATLAB我怎么做逻辑掩蔽在MATLAB

A = [0.2 234.4 234 093] 
B= [0 0 1 1] 

两个向量现在,我要的是一种面膜,这样,当我掩盖A和B,我得到[0 0 234 093]。如何在matlab中做到这一点?

回答

3

Logical indexing:

mask = logical(B); 
A(~mask) = 0; 

如果你想提取的元素,你可以做

A(logical(B)) 

这给[234 93]

+0

在第一种方法你做三种操作:逻辑否定,并设置一个,而不是:单元乘法,结果完全一样。 – divanov

+0

@divanov的确,但我想证明_literal_逻辑掩盖。如果您可以选择将“B”创建为首要移除元素的“逻辑”,那么这是最有效的解决方案。 – Notlikethat

2

只需乘元素方面:

A.*B 

如果屏蔽值B不一定1,您可以使用

A.*logical(B) 
+0

考虑到OP显然确实需要将零保留在最终矩阵中,在这里'A *(B> 0)'可能会更好。 – Ansari

+0

@Ansari'A. *逻辑(B)'也保持零。与你的建议不同的是,逻辑(B)给出了'B'的负项,而'B> 0'不是 –

+0

+1好点:) – Ansari

2

下面的几个方面:

>> A .* ~~B 
>> A .* (B~=0) 
>> A(B==0) = 0 
>> A(~B) = 0 
>> A(~(A&B)) = 0 
>> A.^B - ~B 
>> A*diag(B) 
+0

对于'A * diag (B)':-D –