Main Content

save

将工作区变量保存到文件中

说明

示例

save(filename) 将当前工作区中的所有变量保存在 MATLAB® 格式的二进制文件(MAT 文件)filename 中。如果 filename 已存在,save 会覆盖该文件。

示例

save(filename,variables) 仅保存 variables 指定的结构体数组的变量或字段。

示例

save(filename,variables,fmt)fmt 指定的文件格式保存。variables 参数为可选参数。如果您不指定 variablessave 函数将保存工作区中的所有变量。

示例

save(filename,variables,version) 保存为 version 指定的 MAT 文件版本。variables 参数为可选参数。

示例

save(filename,variables,version,'-nocompression') 将变量保存到 MAT 文件,而不压缩。'-nocompression' 标志仅支持 MAT 文件版本 7(默认值)和版本 7.3。因此,您必须将 version 指定为 '-v7''-v7.3'variables 参数为可选参数。

示例

save(filename,variables,'-append') 将新变量添加到一个现有文件中。如果 MAT 文件中已经存在变量,则 save 会使用工作区中的值覆盖它。

对于 ASCII 文件,'-append' 会将数据添加到文件末尾。

要追加到版本 6 的 MAT 文件,您还必须包括 '-v6' 作为输入参数。

示例

save(filename,variables,'-append','-nocompression') 将新变量添加到一个现有文件中,而不进行压缩。现有文件必须为 MAT 文件版本 7(默认值)或 7.3。

示例

save filename 是命令形式的语法。命令形式需要的特殊字符较少。您无需键入括号或者将输入括在单引号或双引号内。使用空格(而不是逗号)分隔各个输入项。

例如,要保存名为 test.mat 的文件,这些语句是等效的:

save test.mat      % command form
save('test.mat')   % function form

您可以包括先前语法中介绍的任何输入。例如,要保存名为 X 的变量:

save test.mat X       % command form
save('test.mat','X')  % function form

当有任何输入(例如 filename)为变量或字符串时,请不要使用命令格式。

示例

全部折叠

将工作区中的所有变量保存在二进制 MAT 文件 test.mat 中。如果 filename 为变量,则使用函数语法。

filename = 'test.mat';
save(filename)

或者,您也可使用命令语法。

save test.mat

从工作区中删除变量并通过 load 函数获取数据。

clear
load('test.mat')

创建两个变量 pq 并将其保存到名为 pqfile.mat 的文件中。

p = rand(1,10);
q = ones(10);
save('pqfile.mat','p','q')

MATLAB® 将这些变量保存到当前文件夹中的文件 pqfile.mat 中。

您也可使用命令语法保存变量 pq

save pqfile.mat p q

创建两个变量,将其保存到 ASCII 文件中,然后查看文件内容。

p = rand(1,10);
q = ones(10);
save('pqfile.txt','p','q','-ascii')
type('pqfile.txt')

type 函数显示文件内容。

或者,使用 save 操作的命令语法。

save pqfile.txt p q -ascii

创建一个包含三个字段 abc 的结构体 s1

s1.a = 12.7;
s1.b = {'abc',[4 5; 6 7]};
s1.c = 'Hello!';

将结构体 s1 的字段保存为名为 newstruct.mat 的文件中的单个变量。

save('newstruct.mat','-struct','s1');

通过 whos 函数检查文件内容。

disp('Contents of newstruct.mat:')
Contents of newstruct.mat:
whos('-file','newstruct.mat')
  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x2               246  cell                
  c         1x6                12  char                

创建两个变量并将其保存到名为 example.mat 的 7.3 版的 MAT 文件中。

A = rand(5);
B = magic(10);
save('example.mat','A','B','-v7.3')

也可使用 save 操作的命令语法。

save example.mat A B -v7.3

创建两个变量并将其保存到名为 myFile.mat77.3 版的 MAT 文件中,而不进行压缩。

A = rand(5);
B = magic(10);
save('myFile.mat','A','B','-v7.3','-nocompression')

或者,使用 save 操作的命令语法。

save myFile.mat A B -v7.3 -nocompression

'-nocompression' 标志有助于更快地保存那些大于 2 GB 或者不会从压缩中受益的变量。

将两个变量保存到 MAT 文件中。然后,将第三个变量追加到同一文件中。

p = rand(1,10);
q = ones(10);
save('test.mat','p','q')

查看 MAT 文件的内容。

whos('-file','test.mat')
  Name       Size            Bytes  Class     Attributes

  p          1x10               80  double              
  q         10x10              800  double              

创建一个新变量 a,并将其追加到 MAT 文件中。

a = 50;
save('test.mat','a','-append')

查看 MAT 文件的内容。

whos('-file','test.mat')
  Name       Size            Bytes  Class     Attributes

  a          1x1                 8  double              
  p          1x10               80  double              
  q         10x10              800  double              

变量 a 将追加到 test.mat,而不会覆盖以前的变量 pq

注意

要追加到版本 6 的 MAT 文件中,请同时指定 '-v6''-append'。例如,要将变量 a 保存到文件 test.mat 中,请调用:

save('test.mat','a','-v6','-append')

将两个变量保存到 MAT 文件中。然后,将第三个变量(不进行压缩)追加到同一文件中。

创建两个变量 AB,然后将它们保存到 77.3 版的 MAT 文件中。默认情况下,save 函数会压缩变量 AB 并将其保存到 myFile.mat 中。

A = rand(5);
B = magic(10);
save('myFile.mat','A','B','-v7.3')

查看 MAT 文件的内容。

whos('-file','myFile.mat')
  Name       Size            Bytes  Class     Attributes

  A          5x5               200  double              
  B         10x10              800  double              

创建新变量 C,并将其附加到 myFile.mat,而不进行压缩。

C = 5;
save('myFile.mat','C','-append','-nocompression')

查看 MAT 文件的内容。

whos('-file','myFile.mat')
  Name       Size            Bytes  Class     Attributes

  A          5x5               200  double              
  B         10x10              800  double              
  C          1x1                 8  double              

输入参数

全部折叠

文件的名称,指定为字符向量或字符串标量。如果您未指定 filenamesave 函数保存为名为 matlab.mat 的文件。

如果 filename 没有扩展名(即没有点以及紧随其后的文本),并且没有指定 format 的值,则 MATLAB 会追加 .mat。如果 filename 不包含完整路径,MATLAB 将保存到当前文件夹中。您必须具有文件的写入权限。

使用命令形式的 save 时,您无需将输入括在单引号中。但如果 filename 包含空格,则您必须将参数括在单引号中。例如,save 'filename withspace.mat'

注意

filename 是字符串时,请不要使用命令形式。

要将工作区变量保存到远程位置的 MAT 文件,请将 filename 指定为以下形式的统一资源定位器 (URL):

scheme_name://path_to_file/my_file.mat

根据您的远程位置,scheme_name 可以是下表中的值之一。

远程位置scheme_name
Amazon S3™s3
Windows Azure® Blob Storagewasbwasbs

save 函数仅支持将 7.3 版 MAT 文件保存到远程位置。

有关设置 MATLAB 以访问在线存储服务的详细信息,请参阅处理远程数据

示例: 'myFile.mat'

示例: 's3://bucketname/path_to_file/my_file.mat'

要保存的变量的名称,指定为字符向量或字符串标量。使用命令形式的 save 时,您无需将输入括在单引号中。

注意

variables 是字符串时,请不要使用命令形式。

variables 可以采用以下格式之一。

variables 输入的格式要保存的变量
var1,...,varN保存列出的变量,指定为单个字符向量或字符串。
可使用 '*' 通配符来匹配模式。例如,save('filename.mat','A*') 会将以 A 开头的所有变量保存到文件中。
'-regexp',expr1,...,exprN仅保存名称与正则表达式匹配的变量,指定为字符向量或字符串。例如,save('filename.mat','-regexp','^Mon','^Tues') 仅将以 MonTues 开头的变量保存到文件中。
'-struct',structName structName 指定的标量结构体的字段作为单个变量存储在文件中。例如,save('filename.mat','-struct','S') 保存标量结构体 S
'-struct',structName,field1,...,fieldN将指定标量结构体的指定字段作为单个变量存储在文件中。例如,save('filename.mat','-struct','S','a','b') 保存字段 S.aS.b
'-struct',structName,'-regexp',expr1,...,exprN仅存储名称与正则表达式匹配的字段,指定为字符向量或字符串。

文件格式,指定为下列值之一。使用命令形式的 save 时,您无需将输入括在单引号或双引号中,例如 save myFile.txt -ascii -tabs

fmt 的值文件格式
'-mat'

二进制的 MAT 文件格式。

'-ascii'

具有 8 位精度的文本格式。

'-ascii','-tabs'

具有 8 位精度的以制表符分隔的文本格式。

'-ascii','-double'

具有 16 位精度的文本格式。

'-ascii','-double','-tabs'

具有 16 位精度的以制表符分隔的文本格式。

对于 MAT 文件,如果数据保存在一台计算机上,然后在另一台计算机上加载,则会根据不同计算机上的浮点格式在最大程度上保留精度和范围。

使用其中一种文本格式将 MATLAB 数值保存为文本文件。在这种情况下:

  • 每个变量都必须是二维 double 数组。

  • 输出项仅包含复数的实部。

  • MATLAB 将每个变量的数据按顺序写入到文件中。如果您计划使用 load 函数读取该文件,所有变量都必须具有相同的列数。load 函数从文件中创建单个变量。

如果您指定一种文本格式且任一变量为二维字符数组,则 MATLAB 将字符转换为其对应的内部 ASCII 代码。例如,'abc' 在文本文件中显示为:

  9.7000000e+001  9.8000000e+001  9.9000000e+001

保存到远程位置时,save 仅支持将 fmt 指定为 '-mat'

数据类型: char | string

MAT 文件版本,指定为下列值之一。使用命令形式的 save 时,您无需将输入括在单引号或双引号中。

version 的值加载到的 MATLAB 版本支持功能压缩每个变量大小的最大值
'-v7.3'7.3 (R2006b) 或更高版本

保存并加载部分变量,以及版本 7 的所有功能。版本 7.3 还支持使用 '-nocompression' 选项保存变量而不进行压缩。

是(默认值)≥ 2 GB(64 位计算机)
'-v7'7.0 (R14) 或更高版本

Unicode® 字符编码。通过编码,可以在使用不同默认字符编码方案的系统之间共享文件,还可以使用版本 6 的所有功能。版本 7 还支持使用 '-nocompression' 选项保存变量而不进行压缩。

是(默认值)每变量 2^31 字节
'-v6'5 (R8) 或更高版本

N 维数组、元胞数组、结构体数组、大于 19 个字符的变量名称,以及版本 4 的所有功能。

每变量 2^31 字节
'-v4'全部

二维 double、字符和稀疏数组。

每数组 100,000,000 个元素,每变量 2^31 字节

如果任何数据项要求了某些功能,而指定的版本不支持这些功能,MATLAB 将不保存这些项并发出警告。您指定的 MATLAB 软件版本不能高于当前使用的版本。

注意

7.3 版本的 MAT 文件使用基于 HDF5 的格式,该格式要求使用一些存储空间开销来描述文件内容。对于元胞数组、结构体数组或可以存储异构数据类型的其他容器,7.3 版本的 MAT 文件有时比版本 7 的 MAT 文件要大。

要查看或设置 MAT 文件的默认版本,请转至主页选项卡,然后在环境部分点击 预设。选择 MATLAB > 常规 > MAT 文件,然后选择 MAT 文件保存格式选项。

数据类型: char | string

局限性

  • 处理远程数据时,save 函数:

    • 不支持保存到 HDFS™

    • 不支持以除 MAT 文件以外的任何格式保存工作区变量。

提示

  • 为更加灵活地创建 ASCII 文件,可使用 fprintf

  • 使用 save 函数保存图形对象可能导致文件较大,因为该文件包含重新生成对象需要的所有信息。

  • 请避免使用 save 函数保存图窗。改用 savefig 函数。在 R2014b 或更高版本中使用 save 保存图窗将使所得的 MAT 文件在早期 MATLAB 版本中无法访问。如果您使用 save 保存图窗,则函数会显示一个警告消息。在使用 save 之前删除所有图窗。请牢记图窗可能不直接存在于您的工作区中。例如,它们可能存储在结构体中或回调函数的工作区中。

版本历史记录

在 R2006a 之前推出