Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

save

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

说明

示例

save(filename) 将当前工作区中的所有变量保存在名为 filename 的二进制 MATLAB® 文件(MAT 文件)中。如果 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 文件,您还必须将 version 指定为 "-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 保存到名为 my file.mat 的文件中,请执行以下命令:

save 'my file.mat' X    % command form, using single quotes
save("my file.mat","X") % function form, using double quotes

当有任何输入(例如 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")

save 函数将这些变量保存到当前文件夹中的文件 pqfile.mat 中。

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

save pqfile.mat p q

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

p = rand(1,3);
q = ones(3);
save("pqfile.txt","p","q","-ascii")
type("pqfile.txt")
   8.1472369e-01   9.0579194e-01   1.2698682e-01
   1.0000000e+00   1.0000000e+00   1.0000000e+00
   1.0000000e+00   1.0000000e+00   1.0000000e+00
   1.0000000e+00   1.0000000e+00   1.0000000e+00

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

save pqfile.txt p q -ascii

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

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

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

save("newstruct.mat","-struct","s1")

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

whos("-file","newstruct.mat")
  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x2               390  cell                
  c          -                150  string              

创建两个变量并将其保存到名为 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.mat 的 7.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" 选项有助于加快保存速度。

将两个变量保存到 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              

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

注意:要追加到版本 6 的 MAT 文件中,请同时指定 "-v6""-append"。例如,要将变量 a 追加到版本 6 的 MAT 文件 test.mat,请运行:

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

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

创建两个变量 AB,然后将它们保存到 7.3 版的 MAT 文件中。默认情况下,save 函数会压缩变量并将其保存到 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              

创建几个变量,并使用命令语法将它们保存到名为 myMat.mat 的文件中。

a = 1;
b = 2;
c = 7;
d = 4;
save myMat.mat a c

修改 c 变量。

c = 3;

仅保存 myMat.mat 中已存在的工作区变量。

existingVars = whos("-file","myMat.mat");
save("myMat.mat",existingVars.name)

输入参数

全部折叠

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

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

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

scheme_name://path_to_file/my_file.mat

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

远程位置scheme_name
Amazon S3™s3
Windows Azure® Blob 存储wasb, wasbs

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

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

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

示例: "myFile.mat"

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

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

variables 可以是以下形式之一。

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

文件格式,指定为下表中的值之一。

fmt 的值文件格式
"-mat"

二进制 MAT 文件格式

"-ascii"

具有 8 位精度的文本格式

"-ascii","-tabs"

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

"-ascii","-double"

具有 17 位精度的文本格式

"-ascii","-double","-tabs"

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

使用命令形式的 save 时,您无需将输入用单引号或双引号引起来。例如,save myFile.txt -ascii -tabs

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

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

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

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

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

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

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

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

数据类型: string | char

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

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

保存部分变量和所有版本 7 的功能。

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

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

是(默认值)每变量 231 字节
"-v6"5 (R8) 或更高版本

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

每变量 231 字节
"-v4"全部

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

每个数组 100,000,000 个元素,每个变量 231 个字节

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

注意

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

注意

版本 6 和版本 4 的 MAT 文件仅支持 ASCII 字符编码。

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

数据类型: string | char

局限性

  • 尝试将两个单独的 MATLAB 会话中的数据同时保存到同一个文件可能导致文件损坏。

提示

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

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

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

  • filename 参量可以是在当前平台上有效的任何名称。但是,为了确保 load 函数可以在任何平台上访问该文件,请不要在 filename 中使用以下任何字符:\(反斜杠)、/(正斜杠)、:(冒号)、*(星号)、?(问号)、"(双引号)、<(小于号)、>(大于号)、|(竖线)、'(撇号)或 ;(分号)。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开