首頁 > ������������txt������������������������

������������txt������������������������

互聯網 2021-12-05 10:03:51

在使用MATLAB的時候,各位一定會遇到過導入數據的煩惱。如果需要導入的數據其數據量巨大的話,那麼在MATLAB編輯器中將這些數據複製粘貼進來,顯然會在編輯器中佔據巨大的篇幅。那麼究竟有沒有一個簡潔的辦法不需要將數據複製粘貼到MATLAB編輯器中,而是直接使用MATLAB自帶的一些函數可以直接將這些數據導入進來呢?一般來說儲存這些數據的文件有兩種形式:1)txt文件;2)excel表格

針對這兩種類型的文件,需要使用兩個不同的函數,今天主要講解導入txt文件的方法。

就導入txt文件來說,我個人習慣使用importdata這個函數。

01 | 導入全是數字類型的txt文件(一)

如果導入的txt文件中,儲存的數據全是數字類型的,且同一行的兩個數字之間使用空格或者製表符進行分隔。這種形式的txt文件如下所示。

儲存這種形式數據的txt文件直接使用如下代碼即可。

present01=importdata('present01.txt');

在MATLAB運行之後的結果如下:

02 | 導入全是數字類型的txt文件(二)

各位小夥伴可能會有疑問,如果我的數據不像剛才給出的數據那麼規整,還能繼續使用上面的代碼了嗎?

如果txt文件儲存如下的數據:

很明顯這個txt文件,第一行只有1,第二行有2和3,第三行有4、5、6和7,第四行有8、9、10和11,第五行有12、13、14和15。如果我們繼續使用上面的代碼,看看能否成功導入數據。

present02=importdata('present02.txt');

在MATLAB運行之後結果如下,是一個15行1列的矩陣,這個很明顯和我們想要的形式不太一樣。

各位可以發現前兩行的數據個數與后三行的數據個數不同,所以在實際導入的時候需要分開導入,這時可以使用如下代碼導入present02.txt文件。

filename='present02.txt'; %文件名delimiterIn = ' ';%列分隔符headerlinesIn = 2;%讀取從第 headerlinesIn+1 行開始的數值數據present02=importdata(filename,delimiterIn,headerlinesIn);dataset=present02.data; %導出的3行以後的數據,即3行4列的矩陣parameters=present02.textdata;%導出的2行以前的數據,即2行1列的元胞數組

filename是文件名,delimiterIn是列分隔符,也就是同一行的兩個數據之間是如何分隔的,可以是空格,也可以是製表符,也可以是逗號。headerlinesIn表示讀取從第 headerlinesIn+1 行開始的數值數據,因為前兩行的數據個數與后三行的數據個數不同,所以這裡headerlinesIn = 2,即從讀取從第 3行開始的數值數據。在MATLAB運行之後的結果如下,是一個結構體,其中包括一個3行4列的矩陣data,和一個2行1列的元胞數組textdata。使用變數dataset儲存這個3行4列的矩陣,使用parameters儲存這個2行1列的元胞數組。

其中這個3行4列的矩陣data就是后三行的數據,這個2行1列的元胞數組textdata就是前兩行的數據。

其實在MATLAB中建議不到萬不得已的時候盡量不用元胞數組cell,因為元胞數組在處理數據不方便。但這個txt文件由於每行的數據個數不同,所以我們沒有辦法將其導入為一個5行4列的矩陣,我們才萬不得已將前兩行數據導入為元胞數組后三行數據導入為3行4列的矩陣

03 | 導入全是數字類型的txt文件(二)拓展

其實各位小夥伴可以嘗試一下,在上述代碼中將headerlinesIn設為5,看看是導入的結果是怎麼樣的?

filename='present02.txt'; %文件名delimiterIn = ' ';%列分隔符headerlinesIn = 5;%讀取從第 headerlinesIn+1 行開始的數值數據present02=importdata(filename,delimiterIn,headerlinesIn);

在MATLAB運行之後的結果如下,是一個5行1列的元胞數組。

這裡各位小夥伴可以思考一下,因為一共只有5行數據,而又將headerlinesIn設為5,所以此時讀取從第6行開始的數值數據,這句話包含兩層意思:1)讀取從第6行開始的數值數據,在present02.txt文件中第6行沒有數據,所以沒有將數據以矩陣的形式導入進來。2)讀取第5行之前的非數值數據,然後用元胞數組cell的形式進行儲存。

04 | 導入數字和字母混合類型的txt文件

比如說現在導入標準的solomon測試算例,前8行中既有數字又有字母,且每行數據個數不同。

觀察發現,第10行以後的數據是一個101行7列的規整的數據。因此,可以將headerlinesIn設為9,具體的代碼如下:

filename = 'c101.txt';%文件名delimiterIn = ' ';%列分隔符headerlinesIn =9; %讀取從第 headerlinesIn+1 行開始的數值數據c101=importdata(filename,delimiterIn,headerlinesIn);row4=c101.textdata{4,1};len=length(row4);dataset=c101.data;%導出的10行以後的數據,即101行7列的矩陣parameters=c101.textdata; %導出的9行以前的數據,即7行1列的元胞數組

在MATLAB運行之後的結果如下:

更多資源盡在:優化演算法交流地

往期精彩

號內搜索遺傳演算法(GA)求解旅行商問題(TSP)MATLAB代碼講解車輛路徑問題(VRP)合集遺傳演算法求解0-1背包問題(附matlab源代碼)模擬退火(SA)演算法求解旅行商 (TSP)問題MATLAB代碼講解多目標優化 | 基於NSGA-II的多目標0-1背包問題求解(附matlab代碼)多目標優化 | NSGA-II進階教程(全網首個三目標優化教程)機器學習 | 基於遺傳演算法的BP神經網路優化演算法(附MATLAB代碼)遺傳演算法求解車間調度問題(附MATLAB代碼)多目標優化 | NSGA-IIword轉換為pdf後圖片失真的解決辦法(全網首發)機器學習 | 簡單實現Bp神經網路二維裝箱問題之BL法修正版(附MATLAB代碼)快速入門文獻管理軟體-EndNote X9最小二乘法(附MATLAB代碼)NSGA-II多目標優化演算法講解(附MATLAB代碼)基於人工勢場法的機器人二維路徑規劃(附MATLAB代碼)基於粒子群演算法的多目標搜索演算法講解(附MATLAB代碼)蟻群演算法通俗講解(附MATLAB代碼)混合粒子群演算法通俗講解(附MATLAB代碼)

免責聲明:非本網註明原創的信息,皆為程序自動獲取互聯網,目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,並提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件12小時內刪除。