I'm trying to create a code that doing something like this ......
    13 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hello........ I'm trying to create a code that doing something like this
data=[1 1 1 -1 1 1 -1 -1 -1 1 1 1]
take the sequence of positive and negative data
= 3 -1 2 -3 3
and, take the position of the value when it changes from positive to negative
= 1 4 5 6 7 10
%----------------------------
I made this code, but only works for positive numbers....... =(
data=[1 1 1 -1 1 1 -1 -1 -1  1 1 1]
z = v > 0;
id = find([true;diff(v.') ~= 0]);
k = diff([id;numel(v)+1]);
out = k(z(id));
Thanks for your help
0 件のコメント
採用された回答
  Guru
      
 2013 年 7 月 4 日
        You had the answer, just had to create a variable of the negative values. I am assuming that
v = data
So just change your code to this
data=[1 1 1 -1 1 1 -1 -1 -1  1 1 1]
z = v > 0;
id = find([true;diff(v.') ~= 0]);
k = diff([id;numel(v)+1]);
% Set all values as if they were negative 1, then assign those that are not 
out = -k; 
out(z(id)) = k(z(id));
0 件のコメント
その他の回答 (1 件)
  Jan
      
      
 2013 年 7 月 5 日
        data   = [1 1 1 -1 1 1 -1 -1 -1  1 1 1];
[v, n] = RunLength(data);
neg    = v < 0;
n(neg) = -n(neg);
参考
カテゴリ
				Help Center および File Exchange で Matrix Indexing についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!