Effacer les filtres
Effacer les filtres

How to keep false as false, and not as zero

13 vues (au cours des 30 derniers jours)
George Smith
George Smith le 7 Nov 2022
Commenté : George Smith le 30 Nov 2022
I want a vector that is laid out like below:
V=[false,false,false,false,x] ;
When the cell is not "false", I want it to take the value that it is (in this case x) and do something with it, but don't do anything if false. My problem comes from the fact that x can be 0, and that MatLab changes the values "false" to be "0". I can't have 0 instead of false, it has to be distinct.
The workaround currently is a data structure like follows:
V.element=[0,0,0,0,1];
V.value=[0,0,0,0,0];
Therefore, it sees if V.element is 1, and if so, checks V.value, otherwise it skips. This is fine, but just awkward to have to change twice as many values when changing the inputs of the function.
Tl;dr : MatLab makes false into a 0. Stop it MatLab; bad MatLab!

Réponse acceptée

David Hill
David Hill le 7 Nov 2022
If you are just using false as a flag, change false into some other number flag. You could use a particular number that will never be used or nan or inf.
V=[nan,nan,nan,nan,0,5];
V(~isnan(V))*5%do something
ans = 1×2
0 25
  1 commentaire
George Smith
George Smith le 10 Nov 2022
Fantastic, thank you so much!

Connectez-vous pour commenter.

Plus de réponses (1)

Steven Lord
Steven Lord le 7 Nov 2022
All the data in the array V must be the same data type. If x is not a logical array, the logical data will be converted to the class of x as shown in the table on this documentation page. This has been the behavior of MATLAB probably since support for logical data was added.
You could have V convert x into logical data, but you probably wouldn't want that either.
x = 2;
V = [false false false false logical(x)]
V = 1×5 logical array
0 0 0 0 1
What exactly is your use case where you're trying to be able to distinguish false and 0 in the same array?
  5 commentaires
George Smith
George Smith le 10 Nov 2022
Good to know, thank you very much!
George Smith
George Smith le 30 Nov 2022
Sorry, I missed the question
It's for Dirichlet Boundary Conditions
If there is one, it can equal 0
I wanted a simple way of saying "There is one and it is equal to zero" in a single cell rather than two cells saying each bit of information separately

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by