在使用MATLAB的時候,各位一定會遇到過匯入資料的煩惱。如果需要匯入的資料其

資料量巨大

的話,那麼在MATLAB

編輯器

中將這些資料複製貼上進來,顯然會在編輯器中佔據

巨大的篇幅

。那麼究竟有沒有一個

簡潔的辦法

不需要將資料複製貼上到MATLAB編輯器中,而是直接使用MATLAB

自帶的一些函式

可以直接將這些資料匯入進來呢?一般來說儲存這些資料的檔案有兩種形式:1)

txt檔案

;2)

excel表格

針對這兩種型別的檔案,需要使用兩個不同的函式,今天主要講解

匯入txt檔案

的方法。

就匯入txt檔案來說,我個人習慣使用importdata這個函式。

01 | 匯入全是數字型別的txt檔案(一)

如果匯入的txt檔案中,儲存的資料全是數字型別的,且同一行的兩個數字之間使用空格或者製表符進行分隔。這種形式的txt檔案如下所示。

MATLAB匯入txt檔案技巧大全

儲存這種形式資料的txt檔案直接使用如下程式碼即可。

present01

=

importdata

‘present01。txt’

);

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

MATLAB匯入txt檔案技巧大全

02 | 匯入全是數字型別的txt檔案(二)

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

如果txt檔案儲存如下的資料:

MATLAB匯入txt檔案技巧大全

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

present02

=

importdata

‘present02。txt’

);

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

MATLAB匯入txt檔案技巧大全

各位可以發現前兩行的資料個數與後三行的資料個數不同,所以在實際匯入的時候需要分開匯入,這時可以使用如下程式碼匯入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列的元胞陣列。

MATLAB匯入txt檔案技巧大全

MATLAB匯入txt檔案技巧大全

MATLAB匯入txt檔案技巧大全

MATLAB匯入txt檔案技巧大全

MATLAB匯入txt檔案技巧大全

其中這個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列的元胞陣列。

MATLAB匯入txt檔案技巧大全

這裡各位小夥伴可以思考一下,因為一共只有5行資料,而又將headerlinesIn設為5,所以此時讀取從

第6行

開始的

數值資料

,這句話包含兩層意思:1)讀取從

第6行

開始的

數值資料

,在present02。txt檔案中第6行沒有資料,所以沒有將資料以

矩陣

的形式匯入進來。2)讀取

第5行之前

的非

數值資料

,然後用元胞陣列cell的形式進行儲存。

04 | 匯入數字和字母混合型別的txt檔案

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

MATLAB匯入txt檔案技巧大全

觀察發現,第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執行之後的結果如下:

MATLAB匯入txt檔案技巧大全

MATLAB匯入txt檔案技巧大全

MATLAB匯入txt檔案技巧大全

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

往期精彩

號內搜尋

遺傳演算法(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程式碼)