2013-10-04 56 views
0

我只是對數據縮減有個簡單的問題。我有大約1500個文件,我想刪除那些不符合特定標準的文件。Reduce將數據集設置爲包含僅具有某些特徵的文件

基本上我正在擬合gaussians數據集,它給了我一個平均值和一個全寬半最大值。我只想選擇曲線的平均值大約爲+/- 1500且半高寬度小於5000的文件。

我打算使用if條件,但它比我更難首先想到。

我有什麼至今:

if FWHM <= 5000 and (-1600 <= mean <= -1500): 
    return (send data to plotting function) 
elif FWHM <= 5000 and (1500 <= mean <= 1600): 
    return (send data to plotting function) 
else: 
    os.remove(os.path.join(path, f)) 

這似乎並不奏效,我認爲它可能不是非此即彼的最佳途徑。

任何提示?非常感激。

編輯:對不起,我應該澄清。我想要的文件包含的範圍在-1600到-1500或1500到1600之間。稍後的想法是將這些文件疊加在一起,並確定它們是否是鏡像對立的。對困惑感到抱歉。

+0

是什麼「似乎並不奏效」的意思,到底是什麼?代碼看起來非常簡單,而且它確實按照你的要求做了一個很好的選擇;-) –

+0

它似乎只是將所有內容發送到繪圖功能,然後刪除它,無論它是否符合標準。 – Jayden

+0

嗯。你在這裏發佈的代碼不會那樣做。沒門。事實上,雖然它可以被簡化一點,但是你發佈的代碼應該幾乎完全符合你所說的你希望它做的事情(例如,你說「全寬半峯值小於5000」,但是代碼使用'<='而不是'< - 完全不重要)。 –

回答

0

你想

FWHM <= 5000 and (-1500 <= mean <= 1500) 

你如果要是平均爲-1600和-1500之間或1500和1600,但不-1500隨時隨地到1500這是你想要什麼,即結構之間纔會是真實的,它將永遠不會工作=)。

0

你可以用abs()簡化,少用語句可能有助於診斷。也許可以打印出所有也被刪除的好文件 - 確保發生的事情是你相信正在發生的事情。

if FWHM <= 5000 and (1500 <= abs(mean) <= 1600): 
    true_file = os.path.join(path, f) 
    return (send data to plotting function) 
else: 
    if true_file == os.path.join(path, f): 
     print 'I am deleting a GOOD file:', true_file 
    os.remove(os.path.join(path, f)) 
    true_file = '' 

編輯添加的診斷print語句

+0

謝謝,添加打印語句在幫助我識別問題方面發揮了重大作用(即我的參數太緊)。 – Jayden

相關問題