How do I get the maximum numbers of every "increasing pattern" in each row in a matrix?

1 view (last 30 days)
Here is a matrix A consisting of "increasing patterns".
A=[1,2,3,1,2,3,4,1,2,1,2,3,4,1,1;1,2,1,1,2,3,1,2,3,4,1,2,3,4,5]
In each row of matrix A, all "increasing patterns" begin with 1.
Visually, all "patterns" are underlined separately below. The largest numbers in all "patterns" are in bold.
A =
1 2 3 1 2 3 4 1 2 1 2 3 4 1 1
1 2 1 1 2 3 1 2 3 4 1 2 3 4 5
How do I get B? This is, get the maximum numbers of all "patterns" in each row.
B=3 4 2 4 1 1
2 1 3 4 5 0
% use zero to fuilfill matrix B to make dimensions of each row consistent

Accepted Answer

Stephen23
Stephen23 on 27 Dec 2018
>> A = [1,2,3,1,2,3,4,1,2,1,2,3,4,1,1;1,2,1,1,2,3,1,2,3,4,1,2,3,4,5]
A =
1 2 3 1 2 3 4 1 2 1 2 3 4 1 1
1 2 1 1 2 3 1 2 3 4 1 2 3 4 5
>> X = diff(A,1,2)~=1;
>> X(:,end+1) = true;
>> B = A.*X
B =
0 0 3 0 0 0 4 0 2 0 0 0 4 1 1
0 2 1 0 0 3 0 0 0 4 0 0 0 0 5
  3 Comments
Stephen23
Stephen23 on 27 Dec 2018
Edited: Stephen23 on 27 Dec 2018
>> Y = B.';
>> Z = +~sort(Y==0,1);
>> Z(Z==1) = Y(Y~=0);
>> B = Z(any(Z,2),:).'
B =
3 4 2 4 1 1
2 1 3 4 5 0

Sign in to comment.

More Answers (1)

Linjun He
Linjun He on 27 Dec 2018
Edited: Linjun He on 27 Dec 2018
A2=[A,ones(size(A,1),1)]-[ones(size(A,1),1),A]<=0
B=A2(:,2:end).*A
Here is what I get.
B =
0 0 3 0 0 0 4 0 2 0 0 0 4 1 1
0 2 1 0 0 3 0 0 0 4 0 0 0 0 5
It's not a good answer but it's ok for me.
I am still looking forward to a better answer.
  2 Comments
madhan ravi
madhan ravi on 27 Dec 2018
but in the orginal question your desired output is different right I mean 5 was padded with 0 at the end??

Sign in to comment.

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!