Finding sorted rows in a matrix

Hi,
I need to know which rows of a matrix are sorted in ascending without using the "for" cycle. For instance, if i have:
outsx = [
1 1
2 1
3 1
1 2
2 2
3 2
1 3
2 3
3 3]
i want a vector containing indexes of which rows are sorted in ascending order. In this case.
ii= [1 4 5 7 8 9]
Thank you in advance

Réponses (3)

the cyclist
the cyclist le 20 Mar 2021
For my current understanding of what you want, I believe this works:
ii = find(diff(outsx,[],2)>=0)

2 commentaires

I assume an all() is wanted:
ii = find(all(diff(outsx,[],2) >= 0, 2))
the cyclist
the cyclist le 21 Mar 2021
Yes, thanks for catching that

Connectez-vous pour commenter.

the cyclist
the cyclist le 20 Mar 2021
Modifié(e) : the cyclist le 20 Mar 2021
outsx = [
1 1
2 1
3 1
1 2
2 2
3 2
1 3
2 3
3 3];
ii = find(outsx(:,2)>=outsx(:,1))
ii = 6×1
1 4 5 7 8 9

1 commentaire

Marco Gaetani d'Aragona
Marco Gaetani d'Aragona le 20 Mar 2021
Hi,
I would need a more general formulation, cosidering matrixes with different number of rows and columns

Connectez-vous pour commenter.

Star Strider
Star Strider le 20 Mar 2021

0 votes

Two approaches:
for k = 1:size(outsx,1)
TF(k,:) = issorted(outsx(k,:),2,'ascend')
end
Result = find(TF)
TF = outsx(:,2) >= outsx(:,1);
Result = find(TF)
both producing:
Result =
1
4
5
7
8
9
.

2 commentaires

Marco Gaetani d'Aragona
Marco Gaetani d'Aragona le 20 Mar 2021
Hi,
I need to perform this check for matrixes nxm, so I need a faster procedure without employing for cycles.
the cyclist
the cyclist le 20 Mar 2021
FYI, just because code has a for loop does not necessarily mean it is slower than other solutions.
Finding a solution that works is the first step (partly to verify that the solution does what you want), and then thinking about readability and optimization follows.

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by