2014-11-03 81 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