ismember 0×0 empty logical array to logic

32 visualizaciones (últimos 30 días)
Sonima
Sonima el 18 de Abr. de 2019
Comentada: Sonima el 20 de Abr. de 2019
Hi All,
I have an array "A = [1 2 3 4 5 6]" which its length reduces in a loop
if ~ismember(A,ID)
do this
else
do that
end
This works fine until the A=[], which ismember returns
0×0 empty logical array
However I need a Single Value and not logical array. Note that I cannot use any and all functions to reduce Logical Arrays to Single Value, beacuse I faced with other problems when "A" array is not yet empty!
How can I fix this problem?
  1 comentario
madhan ravi
madhan ravi el 19 de Abr. de 2019
First and foremost what is your goal? What is the expected result for given A?

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 19 de Abr. de 2019
The obvious answer would seem to be to test
if isempty(A) || ~ismember(A,ID)
If you were hoping there were a hidden preference you could set that would make ismember(A,ID) return a non-empty value without having to change your test.. sorry, there is no such test.
I would point out that you could also rewrite your code:
if ismember(A,ID)
do that
else
do this
end
the ismember() would be empty when A is empty, so the test would fail, and do that would not be done, leaving you to fall through to the do this case.
  1 comentario
Sonima
Sonima el 19 de Abr. de 2019
Editada: Sonima el 19 de Abr. de 2019
I tried this already, but it doesn't work!
>> isempty(A) || ~ismember(A,ID)
Operands to the || and && operators must be convertible to logical scalar values.

Iniciar sesión para comentar.

Más respuestas (1)

the cyclist
the cyclist el 19 de Abr. de 2019
Editada: the cyclist el 19 de Abr. de 2019
Making a huge guess here, but are you sure you don't mean
~ismember(ID,A)
rather than
~ismember(A,ID)
Then, assuming ID is a scalar,
~ismember(ID,[])
returns true, which I'm guessing is the result you are intending.
Like I said ... just a guess. (And you might need to adjust your other logic accordingly.)
Part of the reason I am guessing this is that
~ismember(A,ID)
returns a vector of values (if A is a vector and ID is a scalar), which is not typically what you want in an if statement. But maybe it is in your case.
  3 comentarios
the cyclist
the cyclist el 19 de Abr. de 2019
OK, so are you aware that
if [true true false]
do this
else
do that
end
will "do that", because every element has to be true to get to the "do this" part of the if statement. (The reason I am so insistent is that this is a very common misunderstanding, and people often think that MATLAB somehow process the vector "in parallel".)
It would be good to give a an example of a combination of A and ID where you expect your if statement to "do this". It seems to me that the only way it happens is if none of the elements of A is equal to ID, in which case there are simpler ways to do what you want.
Sonima
Sonima el 20 de Abr. de 2019
Good point. thanks!

Iniciar sesión para comentar.

Categorías

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

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by