Count the number of trend changes in a vector.
显示 更早的评论
I need to count the number of times a vector increases/decreases. E.g
vec = [0 0 1 2 4 4 2 0 1 2 3]
diff(vec)
ans =
[0 1 1 2 0 -2 -2 1 1 1]
would evidently yield 4 trend changes. I don't wish to count the zero as a trend.
Tips please!
Update:
If you were to plot(vec) it's easier to see what I mean. I wish to simply count the number of row changes in the plot. A flat line (derivative of 0) isn't considered a row change in my application.
Take this as an example:
vec = [3 3 3 5 5 4 3 2 4 5 5 5];
plot(vec)
As you can see from the plot, it's 4 row changes (even though it's 8 in pure diff).
Update:
Ok, I'll try to do better.
Imagine a matrix that describes position over time, where row is position and column is time. When going in a straight line (along a single row) I wish to do nothing. But when changing course over to another row-line I wish to count each new "course" as an occurrence.
E.g
- Travelling at row 5 and then moving up to row 6 and then going straight, that's one course change.
- [5 5 5 6 6 6] => 1 "course change"
- Travelling at row 5 and then moving up to row 7 is similarly one change.
- [5 5 5 7 7 7] => 1 "course change"
- Travelling at row 5, moving up to 7 and then directly back to row 6 is then two changes.
- [5 5 5 7 6 6 6] => 2 "course changes"
- Travelling at row 5, moving up to 7 and then to 12 and then going straight is two changes as the row increment is 2 and then 5 (not a straight course).
- [5 5 5 7 12 12 12] => 2 "course changes"
So basically I wish to count each time you change position (or row) in a straight course.
4 个评论
Sean de Wolski
2012-7-12
If zero doesn't count, then I only see three chanfges
[0 into 1]
[0 into -2]
[-2 into 1]
please clarify.
Jan
2012-7-12
I still do not see, why this diagram includes "4 height changes". Please define "height change" exactly.
Jan
2012-7-16
Please, Sebastian, add informations, which are necessary to define the question, by editing the question, not as comment.
Sebastian Holmqvist
2012-7-30
采纳的回答
更多回答(2 个)
Doug Hull
2012-7-12
0 个投票
You would need to remove the zeros from the first diff vector and diff it again, then count number of non-zeros. The only complication is the case where the first diff vector looks like:
[1 1 0 1 1]
Once the zero is removed, it looks constant. That can be dealt with, but would be messy.
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!