Returning Incorrect index of array
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Khairul Nur
am 9 Jul. 2021
Kommentiert: Khairul Nur
am 22 Jul. 2021
hi,
The simple code below try to find the min value and its index, excluding 0
x = [0 0.5 4 5];
[r,index] = min(x(x>0))
The min value is correctly founded as 0.5. However, why the index returns as 1, it suppose to return 2
r =
0.5000
index =
1
Please help to solve. TQVM
2 Kommentare
Stephen23
am 12 Jul. 2021
Without changing any data values:
x = [0,0.5,4,5];
idx = find(x);
[val,idy] = min(x(idx));
val
idx(idy)
Akzeptierte Antwort
Bjorn Gustavsson
am 9 Jul. 2021
It returns 1 for the index because the way you call min, x(x>0) becomes the array [0.5 4 5], and the first element of that array is the smallest.
HTH
3 Kommentare
Scott MacKenzie
am 9 Jul. 2021
I'm not sure if there's a one-liner, but this will work:
x = [0 0.5 4 5];
x(x==0) = realmax;
[~, idx] = min(x)
Weitere Antworten (1)
Viranch Patel
am 9 Jul. 2021
So if you write y = x(x>0), then it will take value only which is greater than 0 from the x and put it into y.
x = [0 0.5 4 5];
y = x(x>0);
[r,index] = min(x(x>0));
So y will be equal to [0.5000 4.0000 5.0000].
Now if you find minimum then the index will be 1 not 2.
I hope you get the answer:)
3 Kommentare
Viranch Patel
am 9 Jul. 2021
If I'm guessing correct, you want to get the index of the lowest positive value. Then you can do this using a single for loop in which you can have two variables, one will store the minimum value and one will store the index.
index = 0;
x = [0 0.5 4 5];
min_value = max(x);
len = length(x);
for i = 1:len
if x(i) < min_value && x(i) > 0
min_value = x(i);
index = i;
end
end
This is quite straight-forward. So you can edit this according to your need.
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!