在 Matlab 中,我有一个 1x204 double 向量。它代表一段时间内的生物信号,并且在这段时间内信号会发生变化 - 有时它达到峰值并上升,有时它保持相对较小,接近基线值 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
最佳答案
要从数组中删除点,请使用语法
total_BOLD_time_course( abs(total_BOLD_time_course<0.01) ) = nan
这使得它们在图表上“空白”,并被进一步的计算忽略,但不会破坏数据点的时间序列。
如果实际上销毁时间点不是问题,那么就这样做
total_BOLD_time_course( abs(total_BOLD_time_course<0.01) ) = []
这样数据点就会减少,并且它们不会映射到您拥有的任何其他time_course
。但好处是它会“弥补”图表中的间隙。
-- PS
请注意,在您的代码中,短语
x<0 && x<-0.01
是多余的,因为如果任何数字小于-0.01,它会自动小于0。我相信第一个应该是x>0
,然后你的代码就可以了。
关于matlab - 如何在 Matlab 中从数据集中删除数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823855/