如何找到数组中最大的非零值集的平均值

时间:2018-07-21 16:43:21

标签: matlab

如何找到A数组的起点并计算从起点到1秒的平均值

A = [0 0 0 0 0 -0.01 -0.2 0.3 0.4 0.5 0 0 0 0 0 0.01 0.02 0.03 0.04 0.1 0.2 0.3 0.4 0.7 0.8 1 1.2 1.3 1.4 1.5]

时间= [0 0.1 .2 .3 .4 .5 .6 .7 .8 .9 1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.8 3 3.1]

通过消除噪声,起点应为A(17),等于0.01

然后从1秒后的起点计算A的平均值

2 个答案:

答案 0 :(得分:1)

代码不言自明

A=[0 0 0 0 0 -0.01 -0.2 0.3 0.4 0.5 0 0 0 0 0 0 0.01 0.02 0.03 0.04 0.1 0.2 0.3 0.4 0.7 0.8 1 1.2 1.3 1.4 1.5] ;
Time=[0 0.1 .2 .3 .4 .5 .6 .7 .8 .9 1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.8 3 3.1];

%make negative values zero
A(A<0)=0; 

%get non negative values position and add padding
mask=[0,A>0,0]; 

%get starting points
startingPoints =strfind(mask,[0 1]); 

%get length of continuous values from starting points
temp =diff(find(~mask))-1;
length = temp(temp>0); 

%get the index of largest length
[~,index]=max(length);

%get starting point
dataStartingIndex = startingPoints(index)

%starting point value
A(dataStartingIndex)

%get ending point after 1 seconds
dataEndingIndex=find((Time(dataStartingIndex)+1)==Time);

%find average
avg=mean(A(dataStartingIndex:dataEndingIndex))

答案 1 :(得分:0)

这实际上取决于您的数据。尚不清楚,但在您的示例中,噪声似乎可能超过了“信息值”。因此,您不能仅凭阈值检测到它。 也许会得到A总是优于0.01的位置:

startpos= (A>0).argmax()
truedata=A[startpos:]
time=T[startpos:]

您可以使用.mean()方法计算平均值。