MATLAB匯入txt檔案技巧大全
在使用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-II
word轉換為pdf後圖片失真的解決辦法(全網首發)
機器學習 | 簡單實現Bp神經網路
二維裝箱問題之BL法修正版(附MATLAB程式碼)
快速入門文獻管理軟體-EndNote X9
最小二乘法(附MATLAB程式碼)
NSGA-II多目標最佳化演算法講解(附MATLAB程式碼)
基於人工勢場法的機器人二維路徑規劃(附MATLAB程式碼)
基於粒子群演算法的多目標搜尋演算法講解(附MATLAB程式碼)
蟻群演算法通俗講解(附MATLAB程式碼)
混合粒子群演算法通俗講解(附MATLAB程式碼)