跳转到内容

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

华夏公益教科书