Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 寻找数据中正曲线的起点和终点指数_Matlab_Difference_Indices - Fatal编程技术网

Matlab 寻找数据中正曲线的起点和终点指数

Matlab 寻找数据中正曲线的起点和终点指数,matlab,difference,indices,Matlab,Difference,Indices,考虑以下示例,其中x为 x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ]; 在图中是这样的: 现在我要找到的是图中每条正曲线的起始和结束索引,并将它们存储在矩阵中。我在下面写的代码工作得很好,但它不是我所说的优雅。有人有更好更有效的方法吗 zero_padding = zeros(1,2); x =

考虑以下示例,其中
x

x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
在图中是这样的:

现在我要找到的是图中每条正曲线的起始和结束索引,并将它们存储在矩阵中。我在下面写的代码工作得很好,但它不是我所说的优雅。有人有更好更有效的方法吗

zero_padding = zeros(1,2);
x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
x = [x zero_padding]
stp(1) = find(x>0 , 1, 'first')
enp(1) = find(x(stp(1):end)==0 , 1, 'first') - 1
stoffset = enp(1);
i = 2
while(~isempty(find(x(stoffset + 1:end)>0 , 1, 'first')))        
    stp(i) = find(x(stoffset + 1:end)>0 , 1, 'first') + stoffset
    enp(i) = find(x(stp(i) + 1:end) == 0 , 1, 'first') + stp(i) - 1
    stoffset = (enp(i)) + 1;
    i = i + 1;    
end
输出为:

>> stp =

     1    22    43    65


>> enp =

    10    31    52    75
这是正确的

注意:我已经尝试使用:

startindex = (find(diff(x)>0)) + 1
endindex = (find(diff(x)<0))
startindex=(find(diff(x)>0))+1

endindex=(find(diff(x)您的第二种方法非常接近,即

startindex = (find(diff(x)>0)) + 1
endindex = (find(diff(x)<0))

看看
diff(data>0)
,你应该能够从那里计算出(当你的“正曲线”开始时,提示返回
1
,当它们结束时返回
-1
)@我已经尝试过这种方法。当正曲线有很多凹陷时,问题就会出现,正如你在x图
diff(data>0)中看到的那样
还将为我们提供这些变化的指数,除非这些下陷低于
0
线,否则不会。在这种情况下,您需要更清楚地定义正曲线的含义。一旦您将
>0
应用于
数据
所有这些下陷都消失了,您刚才看到了您的编辑,您的问题是调用
diff(tvecN)>0
而不是
diff(tvecN>0)
-两者之间存在巨大差异two@Dan啊!现在我明白了我现在明白我的问题了谢谢你的提示
posData = [0, x>0] %prepend with zero to catch if the data starts with a positive region
startindex = find(diff(posData) == 1) 
endindex = find(diff(posData) == -1)