在Matlab中,我有一个1x204双倍的向量。它表示一段时间内的生物信号,并且在那段时间内信号变化 - 有时它会达到峰值并上升,有时它仍然相对较小,接近基线值0.我需要将此数据的倒数绘制出来(在x轴上)针对另一组数据(在y轴上)以进行一些统计分析。
问题在于,由于这些点接近于0,例如我所拥有的最小点是= -0.00497,1 / 0.00497产生的值为-201并变成“异常值”,而其余数据非常不同且值不大。所以我试图从数据集中删除接近0的非常小的值,这样它就不会影响1 /值。
我知道我可以使用cftool从绘图中删除这些点,但是如何删除那些点的矢量?有没有办法实际删除积分?从cftool并删除原始的那些点,我能够生成代码并找出它们的确切点,但我不知道如何创建一个删除了这些点的向量。
有人可以帮忙吗?
我确实尝试使用以下for循环让它删除值,'total_BOLD_time_course'是我的信号,'1 / total_BOLD_time_course'是我要绘制的内容,但问题在于我的if语句total_BOLD_time_course (i)= 1,这不完全正确 - 所以通过这样做,这些点仍然存在于向量中但现在取值1.但我只是希望它们从向量中消失。
for i = 1:204
if total_BOLD_time_course(i) < 0 && total_BOLD_time_course(i) < -0.01
total_BOLD_time_course(i) = 1;
else if total_BOLD_time_course(i) > 0 && total_BOLD_time_course(i) < 0.01
total_BOLD_time_course(i) = 1 ;
end
end
end
答案 0 :(得分:1)
要从数组中删除点,请使用语法
total_BOLD_time_course( abs(total_BOLD_time_course<0.01) ) = nan
这使他们变得空白&#39;在图上,并被进一步的计算忽略,但没有破坏数据点的时间序列。
如果实际上破坏时间点不是问题,那么
total_BOLD_time_course( abs(total_BOLD_time_course<0.01) ) = []
然后会有更少的数据点,并且他们不会映射到您拥有的任何其他time_course
。但优势在于它会关闭&#34;图中的差距。
- PS
请注意,在您的代码中,短语
x<0 && x<-0.01
是多余的,因为如果任何数字小于-0.01,它会自动小于0.我相信第一个应该是x>0
,然后你的代码就可以了。
答案 1 :(得分:1)
如VHarisop所示,您可以设置异常值的阈值并将其排除。但是,根据您的情节,确保剩余数据不会水平分流以填补空白可能很重要。要将1./y
绘制为x
的函数,您可以plot(x, 1./y)
,然后使用ylim
设置y限制以从视图中排除异常值,或使用NaN:< / p>
e = 0.01
y( abs(y) < e ) = nan;
plot( x, 1./y )
对于定量(非可视)统计分析,要么根据建议完全从y
中删除这些值,请记住这会留下较短的向量 - 或使用统计函数知道如何将NaN视为缺少数据(nanmean
,nanstd
等)。
答案 2 :(得分:0)
e = 0.01
,并切断绝对值低于e的所有向量元素。
例如:
# assuming v is your initial vector
e = 0.01
new_vector = v(abs(v) > e);
或者,您可以使用“曲线拟合工具箱”中的excludedata工具,因为您知道要排除的矢量元素的索引。