finding the increase in values
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
johnson saldanha
il 6 Dic 2018
Commentato: johnson saldanha
il 6 Dic 2018
suppose i have a column matrix a=( 2 2 2 3 3 3 5 5 5 4 4 3 3 3 2 2 3 3 3 4 4 4 5 5 5 4 4 3 3 )
i want to find the constant and increasing elements and put them separately in different columns of a matrix. eliminating the decreasing elements.
output(:,1) = ( 2 2 2 3 3 3 5 5 5 )
output(:,2) = (2 2 3 3 3 4 4 4 5 5 5 )
0 Commenti
Risposta accettata
Stephen23
il 6 Dic 2018
Modificato: Stephen23
il 6 Dic 2018
a = [2;2;2;3;3;3;5;5;5;4;4;3;3;3;2;2;3;3;3;4;4;4;5;5;5;4;4;3;3]
idx = [true;diff(a)~=0];
idy = diff(a(idx))>0;
idd = diff([0;idy;0]);
idb = find(idd>0);
ide = find(idd<0);
ids = cumsum(idx);
fun = @(b,e)a(ismember(ids,b:e));
C = arrayfun(fun,idb,ide,'uni',0);
And checking the output:
>> C{:}
ans =
2
2
2
3
3
3
5
5
5
ans =
2
2
3
3
3
4
4
4
5
5
5
2 Commenti
Guillaume
il 6 Dic 2018
You're certainly not getting this error with the exact code that stephen gave. Of course, if your actual vector is a column vector instead of a row vector you either need to use vertical concatenation (i.e. use ; instead of , resulting in [true; diff(a)~=0]) or transpose your input into a row vector (i.e. [true, diff(a.')~=0]). First option is more efficient.
Più risposte (1)
johnson saldanha
il 6 Dic 2018
10 Commenti
Stephen23
il 6 Dic 2018
Modificato: Stephen23
il 6 Dic 2018
See my edited answer, it should work now. For your .xlsx data it gives this:
>> C{:}
ans =
11.250
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
13.750
13.750
13.750
13.750
13.750
13.750
13.750
13.750
13.750
ans =
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
12.500
13.750
13.750
13.750
13.750
13.750
13.750
15.000
15.000
15.000
15.000
15.000
15.000
15.000
15.000
15.000
15.000
And for your .csv data it gives this:
>> C{:}
ans =
1.2500
1.2500
2.5000
3.7500
3.7500
3.7500
5.0000
5.0000
6.2500
6.2500
7.5000
7.5000
7.5000
8.7500
8.7500
8.7500
8.7500
8.7500
8.7500
8.7500
8.7500
8.7500
8.7500
8.7500
ans =
2.5000
2.5000
2.5000
2.5000
3.7500
3.7500
3.7500
3.7500
3.7500
5.0000
5.0000
5.0000
5.0000
5.0000
5.0000
5.0000
5.0000
5.0000
5.0000
ans =
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
3.7500
5.0000
5.0000
5.0000
5.0000
5.0000
5.0000
6.2500
6.2500
6.2500
6.2500
7.5000
7.5000
7.5000
7.5000
7.5000
8.7500
8.7500
8.7500
8.7500
8.7500
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
10.0000
ans =
8.7500
10.0000
10.0000
10.0000
10.0000
10.0000
11.2500
11.2500
11.2500
12.5000
12.5000
13.7500
13.7500
13.7500
15.0000
15.0000
15.0000
15.0000
16.2500
16.2500
16.2500
16.2500
16.2500
16.2500
17.5000
17.5000
17.5000
17.5000
17.5000
17.5000
18.7500
18.7500
18.7500
Vedere anche
Categorie
Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!