How to replace all odd numbers with infinity using find()

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

 採用された回答

Walter Roberson
Walter Roberson 2019 年 10 月 11 日

0 投票

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 件のコメント

timetry2
timetry2 2019 年 10 月 11 日
But how would I replace the odd values with infinities?
Walter Roberson
Walter Roberson 2019 年 10 月 11 日
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
timetry2 2019 年 10 月 11 日
I'm sorry Im still confused. So, could you show me what my code would look like? Thank you in advance
Adam Danz
Adam Danz 2019 年 10 月 11 日
編集済み: Adam Danz 2019 年 10 月 11 日
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
Walter Roberson 2019 年 10 月 11 日
Look at this example:
A = 1:10
locations = [2 7 9]
A(locations) = -1
Walter Roberson
Walter Roberson 2019 年 10 月 12 日
Further example:
A = 1:10;
locations = find(A > 5);
A(locations) = -1
timetry2
timetry2 2019 年 10 月 12 日
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
Walter Roberson 2019 年 10 月 12 日
Hint: rem(), mod()
timetry2
timetry2 2019 年 10 月 12 日
Thank you so much for your help
timetry2
timetry2 2019 年 10 月 12 日
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?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeMatrices and Arrays についてさらに検索

質問済み:

2019 年 10 月 11 日

コメント済み:

2019 年 10 月 12 日

Community Treasure Hunt

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

Start Hunting!

Translated by