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 |
如果文件不是 Excel 电子表格,则仍然可以使用“load”函数读取它
>> load newfile.txt
这只适用于文本完全是数字的,没有特殊格式。否则,您会收到“无法识别的字符”错误。
写入非 Excel 文件或使用 MATLAB 6.5 或更低版本的最快捷方法是使用与写入 Excel 文件相同的代码,但更改扩展名。通常,纯文本文件不会出现格式问题。
为了读取更通用的文本文件,MATLAB 没有一个函数可以轻松完成(除非您有 Excel),但您可以使用 MATLAB 文件交换中的“textread.m”函数读取非常通用的文本文件(对单元格和单元格内文本使用不同的分隔符)(进行谷歌搜索以找到它)。您也可以尝试使用 fscanf,如果格式一致性足够高(即空格数量一致、列中没有字符串和数字混合等)。
MATLAB 包含一个很好的 GUI 应用程序,它将引导您从任何识别的数据文件(通常在 Windows 系统上是 .mat、.txt 或 .xls)导入数据。要使用它,请转到文件 > 导入数据,并选择您要导入的文件。然后,选择存在什么列分隔符(通过选择适当的单选按钮)。最后,单击“下一步”。
MATLAB 以类似于文件名但经过修改以符合 MATLAB 语法的名称保存变量。空格被省略,加号和减号被转换成其他字符。要查看 MATLAB 生成的名称(并可能更改它),请在命令提示符中键入“who”。