How to select values of array using the logical operator "OR"?

1 visualización (últimos 30 días)
GOAL: Hi, I have an array A and want to build a new array B by selecting two or more values using the logical operator OR.
MY SOLUTION: I wrote the following lines:
A=[1 3 4 3 7 8 5 4 6 5]';
B= zeros(size(A));
for i = 1:numel(A)
if A(i) == 3 || 5;
B(i) = A(i);
else
B(i) = NaN;
end
end
PROBLEM: The logical operator OR is not working. The array B is not correct because it is identical to array A. As a result I expected to see:
NaN
3
NaN
3
NaN
NaN
5
NaN
NaN
5
However, If I remove the logical operator OR, B is correct but does not include the value 5.
I wonder if someone could tell me what I'm doing wrong and how to correct these lines.
Thank you in advance for your attention
Emerson
  1 comentario
Andrei Bobrov
Andrei Bobrov el 14 de Sept. de 2012
B = nan(size(A));
i1 = any(abs(bsxfun(@minus,A(:),[3,5])) < eps(100),2);
B(i1) = A(i1);

Iniciar sesión para comentar.

Respuesta aceptada

Image Analyst
Image Analyst el 13 de Sept. de 2012
Editada: Image Analyst el 13 de Sept. de 2012
Try
if A(i) == 3 || A(i) == 5 % BTW, no trailing semicolon needed.
Or, better yet, try this vectorized way:
A = [1 3 4 3 7 8 5 4 6 5]'
indexesToReplace = A == 3 | A == 5
B = nan(size(A));
B(indexesToReplace) = A(indexesToReplace)
  2 comentarios
Emerson De Souza
Emerson De Souza el 14 de Sept. de 2012
Thank you Image Analyst, both suggestions worked well.
Wish you a nice evening
Emerson
Image Analyst
Image Analyst el 14 de Sept. de 2012
If your numbers are floating point, not integers, then you'd best use Andrei's code. Refer to the FAQ: http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by