【发布时间】:2015-03-05 14:34:28
【问题描述】:
在 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
【问题讨论】:
-
不确定你真正想要什么。如果您尝试编写一些代码,请发布它?然后我们可以向您展示如何修复它。
-
嗨,Sanjay,我已经添加了我使用的部分代码,但考虑到我想要的,我认为这没有意义。基本上解释说我有 A = [0.01 2 5 0.001 2.3],我想删除任何接近 0 的点,所以这里我想要 0.01 和 0.001,但我不知道该怎么做。我发布的 for 循环会给我 A = [1 2 5 1 2.3] 但我希望 0.01 和 0.001 完全从向量中消失,这样当我执行 plot(A) 时它看起来并不奇怪,这些点只是排除在外。我希望这是有道理的。
-
我认为您最好先了解您的数据。然后你可以决定应用什么方法。只说
if x< 0.1 then x=0可能就足够了,或者您可能想使用标准差来确定什么是异常值。由您决定最适合您的方法。
标签: matlab vector curve-fitting data-manipulation data-fitting