matlab - 如何在 Matlab 中从数据集中删除数据点

标签 matlab vector curve-fitting data-manipulation data-fitting

在 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/

相关文章:

matlab - 在OpenCV中有一种简单的方法吗?

matlab - 在 Matlab 中调整多重比较的 p 值

arrays - 将空格插入 char 数组

c++ - 获取段错误( vector 声明)

android - 如何使用 android 图形绘制无缝曲线?

Matlab - 我怎么知道一个变量名是否可以自由使用

c++ - 尝试将字符串读入多维 vector

C++ 行到 vector

使用修改的贝塞尔函数进行 Gnuplot 拟合

python - 使用幂律拟合方程