我有一些带有多个“零”的正函数的数值数据,但是,这些零中没有一个是零。我想提取所有这些零值的位置,并想知道最好的方法是什么。这是一个类似于我想要解决的人为设想的例子,其中包括值的示意图,相邻差异以及这些差异的迹象:
a = [ 0.0062 ; 0.0041 ; 0.0021 ; 0.0003 ; 0.0015 ; 0.0031 ; 0.0045 ; 0.0059 ; 0.0062 ; 0.0041 ; 0.0021 ; 0.0003 ; 0.0015 ; 0.0031 ; 0.0045 ; 0.0059 ]/0.0062 ;
d = diff(a) ;
r = -3/2:0.5:length(a)/2-4/2 ;
close all ;
hold on ;
plot( r, a ) ;
plot( r(1:length(d)), d ) ;
plot( r(1:length(d)), sign(d) ) ;
产生:
基于我所做的,我可以迭代数组并找到差异数组的符号从-1变为1的所有位置。两个问题:
答案 0 :(得分:4)
要找到差异从正变为负的值:
indices = find(diff(sign(diff(a)))==2)+1;
在你的例子中,这给出了
indices =
4
12
根据您想要达到的目标,您可以直接找到最接近零的值,如下所示:
b = abs(a);
indices = find(b==min(b))
也给出了
indices =
4
12
请注意,这将找到最接近零的值的索引,除非多个值之间存在联系,在这种情况下,它会返回几个索引。
答案 1 :(得分:0)
如何采取your_data
,执行1./your_data
,然后使用findpeaks
。有关findpeaks
的更多选项,请参阅文档,包括为最低峰值找到阈值的可能性。它应该有所帮助。