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

回答(3 个)

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

2 个评论

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

请先登录,再进行评论。

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 个评论

Hi,
I would need a more general formulation, cosidering matrixes with different number of rows and columns

请先登录,再进行评论。

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 个评论

Hi,
I need to perform this check for matrixes nxm, so I need a faster procedure without employing for cycles.
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.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by