2010-07-26 37 views
2

我正在嘗試使用Matlab編寫清理數據的程序。該程序取得數據的最大和最小值,並拋出小於最小值或大於最大值的數據。清潔部分看起來像一個小問題。這種情況只發生在被檢查變量的最小範圍爲0的情況下。如果是這種情況,由於某種原因,程序不會丟棄介於0和-1之間的數據點。我一直試圖解決這個問題一段時間,並且注意到這是發生這種情況的唯一情況,並且如果您嘗試運行SQL查詢來選擇數據是< 0,它將在0和 - 1,如此有效地發生了與我發生的事情相同的錯誤。想知道是否有人會認識到這一點,並知道它可能是什麼。在0和-1之間查看數據的問題

+3

?向我們展示您的代碼!並澄清SQL查詢和Matlab代碼之間的關係。 – 2010-07-26 17:15:54

+1

在調試部分的*消除過程* Andrew Hunt附帶提示26:*「select」沒有被破壞「*,在花了兩天在* select *中發現錯誤的程序員之後,因爲他認爲他自己代碼是完美無瑕的,但事實並非如此:道德:錯誤的可能原因不在於數據庫或MatLab,而在於你的手寫代碼(並且我們希望看到它)。 www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X – Abel 2010-07-26 17:35:58

+0

@Abel:抱歉缺少代碼示例,新的在這裏:) @Amro的建議似乎有效,而且你肯定是對的,我只是忽略了一些東西現在我明白了,不知道我是怎麼做的,謝謝你所有的時間和精力來幫助我。 – Joey 2010-07-30 19:02:59

回答

4

我會寫這樣的功能:

function data = cleanseData(data, limits) 
    limits = sort(limits); 
    data = data(limits(1) <= data & data <= limits(2)); 
end 

用法的例子:

a = rand(100,1)*10; 

b = cleanseData(a, [-2 5]); 
c = cleanseData(a, [0 -1]); 
你想你的代碼幫助
4

-1小於0,所以0應該是max的值。如果這是它會保持-10之間的點你在清洗動作定義的情況:

,並引發出的數據比最大不到min以上。

如果你想扔掉(使用上述定義)

數據點和介於0 -1

,那麼你需要設置0min值和-1作爲max值---這是沒有意義的。

另外,我覺得你的意思是

,並引發出的數據小於最小,比最大更大。

+0

我認爲你誤會了。 OP選擇'0'作爲最小值,'-1'到'0'範圍內的值由於某種原因未被刪除。 – gnovice 2010-07-26 17:24:17

0

如果我試圖模仿與SQL您的情況,對運行在列SomeVal具有1.00, 0.00, -0.20, -0.80. -1.00, -1.20 and -2.00數據表下面的查詢,它正確返回-0.20 and -0.80,這是符合市場預期。

SELECT SomeVal 
FROM SomeTable 
WHERE (SomeVal < 0) AND (SomeVal > - 1) 

對於MatLab也是如此。也許你的代碼有錯誤。用你自己的SELECT語句檢查上面的語句,看看是否有什麼不妥。

0

,如果你這樣做

minimum = 0 
if minimum and value < minimum 
1

這可能是浮標所得到的比較之前強制轉換爲整數,我可以想像這樣的錯誤。我不知道matlab,但是在python int(-0.5)== 0中,這可以解釋額外的數據點進入。您可以通過將min設置爲-1來測試這一點,如果您還可以從-1到-2,那麼你需要確保鑄造沒有完成。