跳轉到內容

MATLAB 程式設計/從檔案讀取和寫入資料的基本操作

來自華夏公益教科書,開放的書籍,開放的世界


MATLAB 檔案型別

[edit | edit source]

MATLAB 使用兩種檔案型別,分別是 .m 和 .mat 檔案

  • .m / .mat 檔案:標準 MATLAB 檔案(.mat 中的大多數函式可以被舊版本的 MATLAB 支援)
  • .mlx 檔案:即時程式碼檔案格式。這種格式是在 MATLAB 版本 R2016a 中引入的。這種型別的檔案儲存使用即時程式碼檔案格式的即時指令碼/即時函式。

匯入函式

[edit | edit source]

通常用於將資料匯入 MATLAB 的函式是:importdata(filename)
importdata(filename) 可以將資料載入到陣列中。

 % sample script of loading an images
 >> A = importdata('example1.png');
 imread(A)

載入資料

[edit | edit source]


load(filename) 可以從 filename 載入資料。這些檔案可以是文字、影像,甚至音訊檔案。

 % sample script of loading an audio
 >> B = load('example2.mp3');
 audioread(B,single,1.0)

load 命令用於將資料從檔案載入到當前工作空間。

  • 將檔案 mySave.mat 中的所有變數載入到當前工作空間。
 >> load('mySave.mat')
 >> load(fullfile(pwd, 'mySave.mat'))
  • 僅載入變數 myData1 和 myData2。
 >> load('mySave.mat', 'myData1', 'myData2')
  • 載入所有 myData 變數。
 >> load('mySave.mat', 'myData*')
  • 獲取儲存檔案中變數的單元格陣列。
 >> whos('-file', 'mySave.mat')

儲存資料

[edit | edit source]

save 命令用於將工作空間資料儲存到檔案。

  • 將所有工作空間資料儲存到當前目錄下的檔案 mySave.mat 中。
 >> save('mySave.mat')
 >> save(fullfile(pwd, 'mySave.mat'))
  • 僅將變數 myData1 和 myData2 儲存到 mySave.mat 中。
 >> save('mySave.mat', 'myData1', 'myData2')
  • 將所有 myData 變數儲存到 mySave.mat 中。
 >> save('mySave.mat', 'myData*')
  • 將所有 myData 變數儲存到與 MATLAB 版本 6 相容的檔案 mySave.mat 中。
 >> save('mySave.mat', 'myData*', '-v6')
  • 將所有 myData 變數儲存到 ASCII 檔案中。
 >> save('mySave.mat', 'myData*', '-ASCII')
  • 將新變數追加到資料檔案。
 >> save('mySave.mat', 'newData*', '-append')


Excel 電子表格 I/O

[edit | edit source]

由於資料分析是使用輸入輸出的最常見動機之一,因此我將從讀取和寫入電子表格開始。我首先介紹命令列,因為它通常需要在評估 m 函式時匯入資料。

讀取 Excel 電子表格

[edit | edit source]

MATLAB 使讀取 Excel 電子表格變得容易。它具有內建的命令 readcell

假設您有一個 Excel 檔案(最好是最新版本,檔案格式為 .xlsx),在這個例子中,您有一個包含如下所示資料的表格,儲存在名為 Class Marks.xlsx 的任何位置。

姓名 分數
Ali 93
Chin 47
Sammy 74
Dorothy 96
Huat 94
Anna 38

要讀取內容,您需要鍵入如下程式碼

A=readcell('C:\mydir\Class Marks.xlsx') % mydir is referring where you actually saves the Excel file

專業提示:如果您不確定檔案的位置,右鍵單擊您儲存的檔案並選擇屬性,然後在常規選項卡中查詢位置。您可以將 mydir 更改為您選擇的位置

它將顯示如下輸出

A =

  7×2 cell array

    {'Name'   }    {'Marks'}
    {'Ali'    }    {[   93]}
    {'Chin'   }    {[   47]}
    {'Sammy'  }    {[   74]}
    {'Dorothy'}    {[   96]}
    {'Huat'   }    {[   94]}
    {'Anna'   }    {[   38]}

這行程式碼從 Class Marks.xlsx(從儲存的目錄 - mydir)中讀取,並將它放置到 MATLAB 中名為 A 的相同陣列中。然後,您可以以任何您想要的方式運算元組 A。

從文字檔案中的特定範圍讀取

[edit | edit source]

從上面的表格中,我們擴充套件到更多行和列,如下面的名為 Class1A 的工作表所示。請注意 A-> H 和 1->11 是用於參考的。

在這個例子中,我們感興趣的是 Huat 的分數,並建立一個名為 B 的陣列來提取他的分數。

A B C D E F G H
1 姓名 英語 數學 科學 藝術 音樂 馬來語 道德
2 Ali 71 54 65 27 65 54 96
3 Chan 14 96 50 40 17 99 95
4 Sammy 17 15 72 24 55 15 26
5 Dorothy 89 35 45 14 87 52 65
6 Huat 82 90 15 65 42 82 90
7 Anna 12 77 25 63 46 14 31
8 Lee 77 22 49 91 43 89 66
9 Muthu 61 25 38 65 43 35 89
10 Ismail 70 70 79 75 81 44 98
11 Th'ng 42 92 99 14 46 12 24

註釋解釋瞭如何選擇特定範圍的所需資料。

B=readcell('C:\mydir\Class Marks.xlsx','Sheet','Class1A','Range','A6:H6') 
%mydir is the location where Excel is stored
%sheet is to select which sheet
%range can be selected with following manner
%a. form 'A1' (cell)
%b. form 'A:B' (column-select)
%c. form '1:5'(row-select)
%d. form 'A1:B5' (rectangle-select)

陣列 B 將顯示以下結果

B =

  1×8 cell array

    {'Huat'}    {[82]}    {[90]}    {[15]}    {[65]}    {[42]}    {[82]}    {[90]}

寫入 Excel 電子表格

[edit | edit source]

writecell 命令允許將資料新增到 Excel 檔案中。

首先,我們建立學生 Juan 的資料,如下所示

B = {'Juan' , 43,67,88,45,35,92,65} % create a row matrix

B =

  1×8 cell array
    {'Juan'}    {[43]}    {[67]}    {[88]}    {[45]}    {[35]}    {[92]}    {[65]}

稍後,使用 **writecell** 命令(確保 Excel 檔案已關閉以防止出現錯誤訊息)

Error using writecell (line 149)
Unable to write to file 'C:\mydir\Class Marks.xlsx'.  You may not have write permissions or the file may be open by another application.
writecell(B,'C:\mydir\Class Marks.xlsx','Sheet','Class1A','Range','A12');
%mydir is location where the excel file is located
%sheet is Class1A
%range is starting cell where to paste the data

當您重新開啟 Excel 檔案時:您應該會看到 Juan 及其分數

A B C D E F G H
1 姓名 英語 數學 科學 藝術 音樂 馬來語 道德
2 Ali 71 54 65 27 65 54 96
3 Chan 14 96 50 40 17 99 95
4 Sammy 17 15 72 24 55 15 26
5 Dorothy 89 35 45 14 87 52 65
6 Huat 82 90 15 65 42 82 90
7 Anna 12 77 25 63 46 14 31
8 Lee 77 22 49 91 43 89 66
9 Muthu 61 25 38 65 43 35 89
10 Ismail 70 70 79 75 81 44 98
11 Th'ng 42 92 99 14 46 12 24
12 Juan 43 67 88 45 35 92 65

文字檔案 I/O

[編輯 | 編輯原始碼]

讀取文字檔案

[編輯 | 編輯原始碼]

如果檔案不是 Excel 電子表格,則仍然可以使用“load”函式讀取它

>> load newfile.txt

這隻適用於文字完全是數字的,沒有特殊格式。否則,您會收到“無法識別的字元”錯誤。

寫入非 Excel 檔案或使用 MATLAB 6.5 或更低版本的最快捷方法是使用與寫入 Excel 檔案相同的程式碼,但更改副檔名。通常,純文字檔案不會出現格式問題。

為了讀取更通用的文字檔案,MATLAB 沒有一個函式可以輕鬆完成(除非您有 Excel),但您可以使用 MATLAB 檔案交換中的“textread.m”函式讀取非常通用的文字檔案(對單元格和單元格內文字使用不同的分隔符)(進行谷歌搜尋以找到它)。您也可以嘗試使用 fscanf,如果格式一致性足夠高(即空格數量一致、列中沒有字串和數字混合等)。

MATLAB 檔案 I/O:從圖形使用者介面

[編輯 | 編輯原始碼]

MATLAB 包含一個很好的 GUI 應用程式,它將引導您從任何識別的資料檔案(通常在 Windows 系統上是 .mat、.txt 或 .xls)匯入資料。要使用它,請轉到檔案 > 匯入資料,並選擇您要匯入的檔案。然後,選擇存在什麼列分隔符(透過選擇適當的單選按鈕)。最後,單擊“下一步”。

MATLAB 以類似於檔名但經過修改以符合 MATLAB 語法的名稱儲存變數。空格被省略,加號和減號被轉換成其他字元。要檢視 MATLAB 生成的名稱(並可能更改它),請在命令提示符中鍵入“who”。

外部資源

[編輯 | 編輯原始碼]

ControlTheoryPro.com

MatlabCodes.Webs.com

華夏公益教科書