2013-08-22 53 views
4

我從一些.ASC文件中的Mathematica使用Import[filename, "Data"]命令導入數據空值,並將其存儲在表中。我遇到了一個問題,有時.asc文件在文件末尾有一些空行,導致表中出現空值,這會在稍後導致一些問題。刪除在數學表

舉例來說,當我看着data[[5 ;; (Length[data])]],我得到:

{{3446.05, 15.5156}, {3446.18, 14.5156}, ..., {3451.49, 7.51563}, {}, {}, {}, {}}

所以我的問題是:什麼是擺脫這些空值的最佳方式?我研究過忽略導入中的空白,但沒有發現任何可以實現這一點的東西。我也看過Delete,但我似乎無法得到匹配空值的表達式。我能做到這一點

的一種方法是改變Length[data]爲「長度[數據] -4`。但是,這需要對每個文件進行潛在更改,而且我更喜歡某種可能適用於任何文件的更一般化解決方案,無論它們是否有空格。

+2

密切相關:高效的方式?從列表中刪除空列表(http://stackoverflow.com/q/6562902/590388) –

+0

@AlexeyPopkov密切相關,但不完全一樣 - 我確定有沒有被任何亞羣中的其他空項目,其他questi on沒有解決更改Import參數以忽略空白的可能性。但是,這是一個非常徹底的答案,絕對值得一讀,謝謝你的鏈接。 – MattS

+1

的'「數據」''Import'格式似乎是無證(它不是在'$ ImportFormats'上市),但'「表」'格式,你可以使用'「IgnoreEmptyLines」 - > TRUE'選項擺脫空虛的路線。 –

回答

1

如果導入列表被稱爲s,你可以使用:

s/.{}->Sequence[] 

Select[s,Length[#]==2&] 

DeleteCases[s,{}] 

Partition[Flatten[s],2] 
+0

我只用了幾個月的mathematica,並且不熟悉這些函數。我嘗試閱讀關於它們的文檔,但我仍然不確定這裏發生了什麼。你介意解釋這個代碼如何完成我的任務嗎? – MattS

+0

@MattS你有沒有用'data'試過這些方法?這些解決方案不會改變任何'Import'參數,它只是對導入的數據進行後期處理。 –

+0

@AlexeyPopkov我沒有 - 我有一個政策,不執行任何代碼,直到我明白它在做什麼以及如何做。 – MattS

0

最簡單的方法是使用DeleteCases內置功能:

data={{1,2},{},{3,4},{}} 

DeleteCases[data,{}]={{1,2},{3,4}}