MATLAB Answers

0

Replace odd numbers with infinity

Asked by timetry2 on 12 Oct 2019
Latest activity Commented on by timetry2 on 13 Oct 2019
I have a code that looks like the following:
C = randi([100,200],1000,1000);
evenIndices = rem(C,2) == 0
allTheEvenNumbers = C(evenIndices)
allTheEvenNumbers = allTheEvenNumbers -1
locations = find(allTheEvenNumbers)
C(locations) = Inf
I am wanting the odd numbers to be replaced by Inf but it is not working. Where am I going wrong?

  2 Comments

@Adam Thanks, I missed that.

Sign in to comment.

1 Answer

Answer by per isakson
on 12 Oct 2019
Edited by per isakson
on 13 Oct 2019
 Accepted Answer

%%
C = randi([100,200],3,6)
is_odd = rem(C,2) == 1;
D = C;
D( is_odd ) = inf
returns
C =
117 103 107 159 122 113
137 199 184 123 152 191
134 152 158 145 188 133
D =
Inf Inf Inf Inf 122 Inf
Inf Inf 184 Inf 152 Inf
134 152 158 Inf 188 Inf
which looks ok.
"Where am I going wrong?"
  • The title says "Replace odd ..." and the code focuses on even
  • experimenting with a large matrix, which is difficult to inspect
  • evenIndices is a logical index, in which true indicates locations with even values. evenIndices is not an optimal name.
  • allTheEvenNumbers is a vector of integers in the range of [ 100, 200 ]. The number of elements in allTheEvenNumbers is approximately half of that in C.
  • it is not meaningsful to substract one from allTheEvenNumbers. Ok, is your intention a negation of a logical value?
  • ...
In response to a comment
In the previous question, there is a requirement to use the function, find()
One may do that, but there is little point
%%
C = randi([100,200],3,6)
C( find( rem(C,2) == 1 ) ) = inf
returns
C =
180 103 168 139 171 104
196 185 176 166 103 109
166 194 175 117 127 183
C =
180 Inf 168 Inf Inf 104
196 Inf 176 166 Inf Inf
166 194 Inf Inf Inf Inf

  1 Comment

Thank you so much! This really helped

Sign in to comment.