What is wrong with my while loop?
    13 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Jet Verheij
 el 15 de Feb. de 2018
  
    
    
    
    
    Comentada: Jet Verheij
 el 15 de Feb. de 2018
            I have this big matrix, 592x528x903 single, called X. I want to see if the X(:,:,1) is not equal to any other in the matrix. I use this code:
b=2;
while b < 902
    if X(:,:,1) ~= X(:,:,b)
        b
    end
    b=b+1;
end
disp done
I get nothing on the screen, except done, so first I thought they all where equal. The problem is that if i use "equal to", i get the same response, nothing on the screen.
b=2;
while b < 902
    if X(:,:,1) == X(:,:,b)
        b
    end
    b=b+1;
end
disp done
Something is not working, they can't be both equal and not equal at the same time, or am I wrong?
0 comentarios
Respuesta aceptada
  Brendan Hamm
    
 el 15 de Feb. de 2018
        Your problem is that the result of
X(:,:,1) == X(:,:,b)
or
X(:,:,1) ~= X(:,:,b)
will return a logical matrix the same size as X(:,:,1) which apparently is never all true or all false and thus the if statement always evaluates to be false. The reson is this performs an element-wise comparison. If you want to check equality of the entire matrix, you should use the isequal function (isequaln if you want to ignore NaN in the matrices).
X = randi([0 1],2,2,902); % X with some equal pages.
b=2;
while b < 902
    if isequal(X(:,:,1),X(:,:,b)) % or isequaln
        b
    end
    b=b+1;
end
disp done
Más respuestas (1)
  KL
      
 el 15 de Feb. de 2018
        
      Editada: KL
      
 el 15 de Feb. de 2018
  
      Comparing matrices is easier if you use isequal command.
You should use it like,
 if(isequal(X(:,:,1),X(:,:,b)))
What you're actually doing while using == or ~= is extracting a logical matrix as the result. Check this below example,
A = [1,2;3 4];
B = [1 0;3 4];
A==A
ans =
     1     1
     1     1
A==B
ans =
     1     0
     1     1
You see the problem?
Whereas, if you use isequal,
isequal(A,A)
ans =
     1
isequal(A,B)
ans =
     0
Ver también
Categorías
				Más información sobre Number Theory 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!


