MATLAB: Count the number of trend changes in a vector.

MATLABtrendvector

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.

Best Answer

EDIT
a = diff(vec(:));
out = nnz(unique(cumsum([true;diff(a)~=0]).*(a~=0)));