Effacer les filtres
Effacer les filtres

compare 2 consequtive columns ?

1 vue (au cours des 30 derniers jours)
Celestie Gladys
Celestie Gladys le 26 Jan 2023
Commenté : Walter Roberson le 26 Jan 2023
for example this 3x6 matrix
3 3 4 4 5 5
6 6 5 5 8 8
9 9 7 7 2 2
i want to compare two columns and display any changes in column , diplay number of times the changes occur .
the output should be
3 4 5
6 5 8
9 7 2
number times : 2
  3 commentaires
Fangjun Jiang
Fangjun Jiang le 26 Jan 2023
You first and second column happen to be exactly the same. What if only one element changed, for example the second column is [3,10,9]'. Does it count as a change? What is the desired output? The number of changes? (in your case, 2)?
Celestie Gladys
Celestie Gladys le 26 Jan 2023
@Fangjun JiangThe data I have changes the entire column, or it dosent change at all , so I asked about the entire column .

Connectez-vous pour commenter.

Réponse acceptée

Fangjun Jiang
Fangjun Jiang le 26 Jan 2023
Modifié(e) : Fangjun Jiang le 26 Jan 2023
data=[3 3 4 4 5 5
6 6 5 5 8 8
9 9 7 7 2 2];
index=diff(data,1,2)
index = 3×5
0 1 0 1 0 0 -1 0 3 0 0 -2 0 -5 0
index2=any(index)
index2 = 1×5 logical array
0 1 0 1 0
output=sum(index2)
output = 2
OutData=data(:,[true,index2])
OutData = 3×3
3 4 5 6 5 8 9 7 2
  7 commentaires
Celestie Gladys
Celestie Gladys le 26 Jan 2023
@Walter Roberson why does index=diff(data,1,2) dosent work and it suppose to generate [0,1]does it work on double ?
Walter Roberson
Walter Roberson le 26 Jan 2023
diff() works fine on double, but your data might not be exactly what you think it is.
format long g
x = rand(1,10);
x(3) = x(2);
x(7) = x(6)*(1+eps);
x.'
ans = 10×1
0.891461741281098 0.631347191045054 0.631347191045054 0.516064708409579 0.824509730719412 0.720280713237283 0.720280713237283 0.96542744133625 0.503147047594 0.108609798103955
entry 3 should be exactly the same as entry 2, so we should see an exact 0 difference there
entry 7 displays exactly the same as entry 6, but is different in the final bits, so we should not see an exact 0 difference there
diff(x,1,2).'
ans = 9×1
-0.260114550236044 0 -0.115282482635475 0.308445022309833 -0.104229017482129 1.11022302462516e-16 0.245146728098968 -0.462280393742251 -0.394537249490044

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by