2014-11-03 41 views
2

对于我正在处理的出版物需要分析的一些EMG数据,我有一个小问题。在MATLAB中删除/处理数据

我有13000个数据点例如一列数据,

0 
0 
0 
1.2 
2.5 
3.9 
6.8 
5.3 
2.9 
1.5 
500 
... and so on. 

现在我有问题的是,在这个数据集,有无数点,如500以上,其作物向上在数据。这些不是错误的数据,它们只是1000倍。

我的问题是解决这些数据点。我可以使用下面的脚本

A = (filename) 
A(A>100)=NaN 

我遗憾的是很新的Matlab的删除他们,所以我希望有人能帮助我用一个脚本,而不是与NaN的替换错误的数量,除以它由1000到以正确的单位生成一个数字。

非常感谢

大卫

+2

为什么不能用'A(A> 100)= A取代的NaN分配(A> 100)./ 1000'? – kkuilla 2014-11-03 15:56:21

回答

1

了解逻辑索引

你用这个命令

A = (filename) 
A(A > 100) = NaN 

做什么叫做logical indexing。您基本上正在构建大小为numel(A)的逻辑(布尔值,0和1)的临时向量,将每个元素> 100设置为1,并将每个其他元素设置为0。然后,您使用此临时逻辑阵列来索引矢量A。当您这样做时,会发生什么A(A > 100)是,您只选择A中与逻辑向量中设置为1的项目对应的项目。为了完整起见,给出

>> A = [0 0 0 1.2 101 3.9 6.8 500]; 
>> indexes = A > 100 
    indexes = [0 0 0 0 1 0 0 1] 
>> A(indexes) % This is equal to your A(A > 100) 
    ans = [101, 500] 

比例缩小你的价值

已经明白这一点,然后你做了什么你要分配NaN到所选择的值:A(A > 100) = NaN。而不是做这个的,你可以用任何的因素,你需要在你的情况,1000规模下来:

>> A = [0 0 0 1.2 101 3.9 6.8 500]; 
>> indexes = A > 100 
    indexes = [0 0 0 0 1 0 0 1] 
>> A(indexes) % This is equal to your A(A > 100) 
    ans = [101, 500] 
>> A(indexes) = A(indexes) ./ 1000 
    A = [0 0 0 1.2 0.101 3.9 6.8 0.500] 

卸下价值

因为你说你是新的Matlab的,我将它添加到NaN分配元素呢不要将它们从你的矢量中删除。你正在做的事可能适用于你,因为你正在绘制这些数据,而Matlab的plot()函数不会绘制值为NaN的数据点。

的正确方法从载体中移除数据是将其分配到一个空值[]这样的:

>> A = [0 0 0 1.2 101 3.9 6.8 500]; 
>> indexes = A > 100 
    indexes = [0 0 0 0 1 0 0 1] 
>> A(indexes) % This is equal to your A(A > 100) 
    ans = [101, 500] 
>> A(indexes) = [] 
    A = [0 0 0 1.2 3.9 6.8] 
2
A = [0 0 0 1.2 2.5 3.9 6.8 5.3 2.9 1.5 500]; 

我们发现所有地方A>100

(A(A>100)) 

我们采取的值这些索引和除以1000他们,逐元素

指数
A(A>100)./1000 

然后将它们分配回去。

A(A>100) = A(A>100)./1000; 

A' 
ans = 

    0.00000 
    0.00000 
    0.00000 
    1.20000 
    2.50000 
    3.90000 
    6.80000 
    5.30000 
    2.90000 
    1.50000 
    0.50000 
+0

你可能应该解释为什么你在做的工作,而不是只发布代码。教男人去钓鱼。 ;) – JoErNanO 2014-11-03 16:13:46

+0

尽管我认为你可以做到(很多),而不是像@JoErNanO所展示的那样冗长,但我同意至少添加1或2行来描述你的解决方案是很好的。 – 2014-11-03 16:15:45

+0

@ DennisJaheruddin记得OP说他对Matlab非常* *。因此(尽管过度)冗长。 ;) – JoErNanO 2014-11-03 16:25:40