index problem while sort

12 Ansichten (letzte 30 Tage)
VINAY PRAJAPATI
VINAY PRAJAPATI am 1 Feb. 2024
Verschoben: Walter Roberson am 1 Feb. 2024
I am trying to sort some positive values from one array and finding the index of that.
Omega=[1.528 -1.528 0.792 -0.792];
[NN,ind]=sort(Omega(Omega>=0));
Answer:
NN=[0.792 1.528]
but
ind=[2,1] is coming which is wrong. It should ind=[3,1].
Please help regarding this.

Akzeptierte Antwort

Dyuman Joshi
Dyuman Joshi am 1 Feb. 2024
Bearbeitet: Dyuman Joshi am 1 Feb. 2024
"ind=[2,1] is coming which is wrong."
It is correct.
The input to sort() only has 2 elements, so the expectation to get [3 1] as the output is misplaced -
Omega=[1.528 -1.528 0.792 -0.792];
Omega(Omega>=0)
ans = 1×2
1.5280 0.7920
I assume you want to get the indices of these particular values from the original array, in that case, try this -
NN=sort(Omega(Omega>=0))
NN = 1×2
0.7920 1.5280
[~,idx] = ismember(NN,Omega)
idx = 1×2
3 1
Ideally, you should use ismembertol to compare floating point numbers.
However, the values here are obtained directly from the original array via indexing, so ismember() works here.
  1 Kommentar
VINAY PRAJAPATI
VINAY PRAJAPATI am 1 Feb. 2024
Verschoben: Walter Roberson am 1 Feb. 2024
Thank you so much sir for solving the problem.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

VBBV
VBBV am 1 Feb. 2024
Verschoben: Dyuman Joshi am 1 Feb. 2024
Here is another way to get the indices without overhead of using ismember function
Omega=[1.528 -1.528 0.792 -0.792];
[NN,ind]=sort(Omega)
NN = 1×4
-1.5280 -0.7920 0.7920 1.5280
ind = 1×4
2 4 3 1
ind(NN>0)
ans = 1×2
3 1

Kategorien

Mehr zu Shifting and Sorting Matrices 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!

Translated by