Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Matlab中从数据集中删除数据点_Matlab_Vector_Curve Fitting_Data Manipulation_Data Fitting - Fatal编程技术网

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

如何在Matlab中从数据集中删除数据点,matlab,vector,curve-fitting,data-manipulation,data-fitting,Matlab,Vector,Curve Fitting,Data Manipulation,Data Fitting,在Matlab中,我有一个向量,它是1x204双精度的。它代表了一段时间内的生物信号,在这段时间内,信号会发生变化——有时会达到峰值并上升,有时会保持相对较小,接近0的基线值。为了做一些统计分析,我需要将这个数据(在X轴上)与另一组数据(在y轴上)的倒数绘制出来 问题在于,由于这些点接近于0,例如,我拥有的最小点为=-0.00497,1/0.00497产生的值为-201,并变成“异常值”,而其余数据差异很大,且值没有那么大。所以我试图从数据集中删除非常小的接近0的值,这样它就不会影响1/值 我知

在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
i=1:204时的

如果总课程时间(i)<0和总课程时间(i)<-0.01
总课程时间(i)=1;
否则,如果总课程时间(i)>0和总课程时间(i)<0.01
总课程时间(i)=1;
结束
结束
结束

是的,你可以。您可能需要定义一个阈值,如
e=0.01
,并切断绝对值低于e的所有向量元素。 例如:

# assuming v is your initial vector
e = 0.01
new_vector = v(abs(v) > e);

或者,您可以使用曲线拟合工具箱中的工具,因为您知道要排除的向量元素的索引。

要从数组中删除点,请使用语法

total_BOLD_time_course( abs(total_BOLD_time_course<0.01) ) = nan
是多余的,因为如果任何数字小于-0.01,它将自动小于0。我认为第一个应该是
x>0
,然后您的代码就可以了。

正如建议的那样,您可以为异常值设置阈值并排除它们。但是,根据您的绘图,确保剩余数据不会水平分流以填补空白可能很重要。要将
1./y
作为
x
的函数进行绘制,您可以只
绘制(x,1./y)
,然后使用
ylim
设置y限制以从视图中排除异常值,或者使用NaN:

e = 0.01
y( abs(y) < e ) = nan;
plot( x, 1./y )
e=0.01
y(abs(y)

对于定量(非可视化)统计分析,请按照建议将值从
y
中完全删除,记住这会留下一个较短的向量,或者使用知道如何将NAN视为缺失数据的统计函数(
nanmean
nanstd
,等等)。

不确定实际需要什么。如果你试过写一些代码,请发布它?然后我们可以告诉你如何修复它。嗨,桑杰,我已经添加了我使用的部分代码,但我认为这没有意义,因为我想要什么。为了非常基本地解释,比如说我有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完全从向量中消失,这样当我绘制(A)时,它看起来不奇怪,这些点只是被排除在外。我希望这是有道理的。我认为你最好先了解你的数据。然后你可以决定采用什么方法。如果x<0.1,那么x=0
,或者您可能想使用标准偏差来确定什么是异常值,这就足够了。这取决于你决定什么是最好的方法。谢谢你的帮助!!谢谢你的帮助!让价值观完美运作。非常感谢。
x<0 && x<-0.01
e = 0.01
y( abs(y) < e ) = nan;
plot( x, 1./y )