How to replace all odd numbers with infinity using find()
You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Show older comments
0 votes
Share a link to this question
I have a code that looks like this: C = randi([100,200],1000,1000);
How would I replace all the odd numbers with infinity using the find() function. I read up on find but I am unsure how to replace just the odd numbers.
Thank you in advance
1 Comment
Adam Danz
on 11 Oct 2019
Please don't create duplicate questions
Accepted Answer
Walter Roberson
on 11 Oct 2019
locations = find( Value_Is_Odd(C) );
where Value_Is_Odd is a function or expression that you write that takes in an array of values and returns a logical array of which entries are odd.
Hint: rem(), mod()
11 Comments
timetry2
on 11 Oct 2019
But how would I replace the odd values with infinities?
Walter Roberson
on 11 Oct 2019
locations would give you a vector list of index locations into C. You can assign something to all of those locations using the general forms
Array(Locations) = Value; %for scalar Value to be assigned to all those places
or
Array(Locations) = ValueVector; %for ValueVector being a vector the same size as Locations
timetry2
on 11 Oct 2019
I'm sorry Im still confused. So, could you show me what my code would look like? Thank you in advance
C is a matrix.
This line below will give you the row and column numbers that are TRUE in the find() inputs.
[rowNum, colNum] = find(. . .)
Or, as Walter explained, this version below gives you the linear index of locations.
locations = find(. . .)
Experiment with both versions to understand the outputs.
Walter Roberson
on 11 Oct 2019
Look at this example:
A = 1:10
locations = [2 7 9]
A(locations) = -1
Walter Roberson
on 12 Oct 2019
Further example:
A = 1:10;
locations = find(A > 5);
A(locations) = -1
timetry2
on 12 Oct 2019
I understand the code now with the example. Thank you so much. However, is there a way to only retrieve odd numbers without having to manually input them after find?
Walter Roberson
on 12 Oct 2019
Hint: rem(), mod()
timetry2
on 12 Oct 2019
Thank you so much for your help
timetry2
on 12 Oct 2019
I ended up with a code that looks like this:
C = randi([100,200],1000,1000);
evenIndices = rem(C,2) == 0
allTheEvenNumbers = C(evenIndices)
allTheEvenNumbers = allTheEvenNumbers -1
locations = find(allTheEvenNumbers);
C(locations) = Inf
However, the odd numbers are not being replaced by Inf. What am I doing wrong?
Adam Danz
on 12 Oct 2019
More Answers (0)
Categories
Find more on Logical in Help Center and File Exchange
Tags
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)