save
和load
命令允许以各种格式向磁盘文件写入数据并从中读取数据。写入的文件的默认格式save
可以使用save_default_options
和save_precision
函数控制命令.
例如,下面的代码创建了一个3乘3的矩阵,并将其保存到‘myfile.mat’文件中.
A = [ 1:3; 4:6; 7:9 ]; save myfile.mat A
一旦一个或多个变量被保存到文件中,它们就可以使用load
命令
load myfile.mat A -| A = -| -| 1 2 3 -| 4 5 6 -| 7 8 9
file
¶options file
¶options file v1 v2 …
¶options file -struct STRUCT
¶options file -struct STRUCT f1 f2 …
¶- v1 v2 …
¶str =
save ("-", "v1"
, "v2"
, …)
¶保存命名变量v1, v2,…,在文件中file.
如果没列出变量名,那么Octave保存当前作用域中的所有变量。 否则,完整的变量名或匹配语法用于指定保存的变量。 如果指定-struct选项,那么 scalar结构体的作用域被保存,如果它们是相应的作用域名的变量。 -struct选项可以和特定的作用域名 f1, f2, … 组合使用,只写特定的 作用域到文件中。
save
命令还可以使用函数形式调用。
save ("-option1", ..., "file", "v1", ...)
此时options, file,和变量名参数(v1,…)必须指定为字符串。
save
命令的有效选项在下表中列出。
修改输出格式的选项覆盖由
save_default_options
指定的格式。
-append
附加到文件,而不是覆盖。
-ascii
将矩阵保存在不带标题或任何其他信息的文本文件中。矩阵必须是二维的,并且只有任何复数值的实部才会写入文件。数字以单精度格式存储,并用空格分隔。-ascii的其他参数格式为
-double
以双精度格式存储数字。
-tabs
用制表符分隔数字。
-binary
将数据保存为Octave的二进制数据格式。
-float-binary
以Octave的二进制数据格式保存数据,仅使用单精度。使用此格式仅当您知道所有要保存的值都可以用单精度表示。
-hdf5
将数据保存在HDF5格式((HDF5是一种免费的、可移植的二进制格式,由伊利诺伊大学的国家超级计算应用中心开发。)仅当Octave链接HDF5依赖库时可用。
-float-hdf5
将数据保存在HDF5格式,仅使用单精度。使用此格式仅当您知道所有要保存的值都可以单精度显示。
-text (default)
用Octave的文本数据格式保存数据。
save_precision
函数指定
当保存数据时的有效数字的位数(默认: 17)。文本数据文件头
可以用
save_header_format_string
配置。
-v7.3
-V7.3
-7.3
Octave没有实现用MATLAB的v7.3二进制数据格式保存。
-v7
-V7
-7
-mat7-binary
将数据保存在MATLAB的v7二进制数据格式。
-v6
-V6
-6
-mat
-mat-binary
将数据保存在MATLAB的v6二进制数据格式。
-v4
-V4
-4
-mat4-binary
将数据保存在MATLAB的v4二进制数据格式。
-zip
-z
使用gzip算法压缩文件。这适用于在Octave之外使用gzip压缩的文件,并且gzip也可以用于转换文件以实现向后兼容性。仅当Octave在编译时链接zlib库时,此参数才可用。
要保存的变量列表可以使用包含以下特殊字符的通配符模式(glob模式):
?
匹配任意单个字符。
*
匹配零个或多个字符。
[ list ]
匹配list指定的字符列表.如果第一个字符是!
或^
,那么匹配除list指定字符以外的所有字符。例如,[a-zA-Z]
将匹配所有小写和大写字母字符。
使用时,字段名称规范中也可能使用通配符-struct修饰符(但不在结构体名称本身中)。
注意:如果调用时附带特殊的文件名 "-"
,
那么存储的数据会被返回为字符串而不是写入实际的文件。
当保存全局变量时,变量的全局状态也会被保存。
如果在保存变量之后,稍后使用load
恢复变量,那么它将恢复为全局变量。
全局状态不保留,如果使用
MATLAB 二进制数据文件格式或 -ascii 格式。
用例
命令
save -binary data a b*
保存变量a和所有以b开头的变量到文件data,使用Octave的二进制格式。
详见: load, save_default_options, save_header_format_string, save_precision, csvwrite, dlmwrite, fwrite.
有三个函数可以修改的行为save
.
val =
save_default_options ()
¶old_val =
save_default_options (new_val)
¶old_val =
save_default_options (new_val, "local")
¶查询或设置内部变量,该变量指定的默认参数save
命令,并定义默认格式。
默认值为"-text"
(Octave自己的基于文本的文件格式)。详见的文档save
命令进行其他选择。
当带"local"
参数在函数内部调用时,该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
val =
save_precision ()
¶old_val =
save_precision (new_val)
¶old_val =
save_precision (new_val, "local")
¶查询或设置内部变量,该变量指定以文本格式保存数据时要保留的位数。
默认值为17,这是无损保存和恢复IEEE-754double值所需的最小值;对于IEEE-754单个值,最小值为9。如果文件大小是一个问题,那么最好选择二进制格式来保存数据,而不是降低保存值的精度。
当从具有的函数内部调用时"local"
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
详见: save_default_options.
val =
save_header_format_string ()
¶old_val =
save_header_format_string (new_val)
¶old_val =
save_header_format_string (new_val, "local")
¶查询或设置内部变量,该变量指定用于在Octave保存的文本格式数据文件开头写入的注释行的格式字符串。
格式字符串被传递到strftime
并且必须以字符“#”开头,并且不包含换行符。如果的值save_header_format_string
是空字符串,头注释是从文本格式的数据文件中发出的。默认值为
"# Created by Octave VERSION, %a %b %d %H:%M:%S %Y %Z <USER@HOST>"
当从具有的函数内部调用时"local"
参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。
详见: strftime, save_default_options.
file
¶options file
¶options file v1 v2 …
¶S =
load ("options", "file", "v1", "v2", …)
¶file options
¶file options v1 v2 …
¶S =
load ("file", "options", "v1", "v2", …)
¶加载命名变量v1, v2,…,来自file.
如果未指定任何变量,则将加载文件中找到的所有变量。 否则,完整的变量名或匹配语法可用于 指定保存的变量。文件的格式是自动检测到的,但可以通过提供适当的参数来覆盖。
load
命令也可以使用函数形式调用
load ("-option1", ..., "file", "v1", ...)
此时options, file,和变量名参数(v1,…)必须指定为字符串。
load
的有效参数在下表中列出。
-ascii
强制Octave假定文件包含文本格式的数字列,没有任何标头或其他信息。文件中的数据将加载为单个数字矩阵,该矩阵具有从文件名称派生的变量名称。
-binary
强制Octave假定文件为Octave的二进制格式。
-hdf5
强制Octave假定文件为HDF5格式(HDF5是一种免费的、可移植的二进制格式,由伊利诺伊大学国家超级计算应用中心开发。)
注意:load
只被设计用于
读取用Octave的save
保存的HDF5文件,
而且尝试读取其他的 HDF5 文件可能失败或者生成不可预测的
结果。-hdf5
选项提供一个有限的能力去读取
使用MATLAB的-v7.3 选项生成的文件 (保存为HDF5
格式) ,尽管很多数据类型仍然不支持。这里的格式只在
Octave 在编译时链接 HDF5 依赖库时才可用.
-text
强制Octave假定文件为Octave的文本格式。
-v7.3
-V7.3
-7.3
Octave 没有 支持 MATLAB的 v7.3 二进制数据格式。
因为 v7.3 格式是一个 HDF5 为基础的格式, "-hdf5"
参数
可能被用于打开 v7.3 格式的文件. 注意:Octave现在不能
用这种格式保存。
-v7
-V7
-7
-mat7-binary
强制Octave假定文件用MATLAB的版本7二进制格式。
-v6
-V6
-6
-mat
-mat-binary
强制Octave假定文件用MATLAB的版本6二进制格式。
-v4
-V4
-4
-mat4-binary
强制Octave假定文件用MATLAB的版本4二进制格式。
要保存的变量列表可以使用包含以下特殊字符的通配符模式(glob模式):
?
匹配任意单个字符。
*
匹配零个或多个字符。
[ list ]
匹配list指定的字符列表.如果第一个字符是!
或^
,那么匹配除list指定字符以外的所有字符。例如,[a-zA-Z]
将匹配所有小写和大写字母字符。
如果指定一个输出参数调用,那么Octave将加载的数据赋值,而不是
插入变量到符号表。如果数据文件
只包含数字 (TAB 或 space分隔每列),那么将返回一个矩阵。
否则,load
返回一个由文件中的变量名组成的结构体。
load
命令可以读取在Octave的文本和二进制格式,
MATLAB的二进制格式和很多简单格式(例如逗号分隔列表(CSV))中存储的数据。
如果在编译时启用zlib支持,那么它还可以加载
gzip文件。它还自动检测文件类型且在不同的浮点格式之间转换 (当前只支持 IEEE大端和小端,
其他格式可能在未来添加)。
注意: 如果一个变量没有被标记为global,且当有同名的全局变量时从文件中加载此变量,那么它将被加载进入全局符号表。 此外,如果一个变量被标记为global,且有同名局部变量,那么局部符号被移入全局符号表,并赋值为文件中的值。
str =
fileread (filename)
¶str =
fileread (filename, param, value, …)
¶阅读的内容filename并将其作为字符串返回。
param, value是可选的键值对。有效参数包括:
"Encoding"
指定从文件中读取时使用的编码。这是一个有效编码标识符的字符串。默认为"utf-8"
.
fmtstr =
native_float_format ()
¶以字符串形式返回本机浮点格式。
可以以类似于的方式将数据写入文件disp
用于将数据写入屏幕的函数。这里的fdisp
起作用原理就像disp
,除了它的第一个参数是文件指针fopen
。例如,以下代码写入数据myfile.txt’.
fid = fopen ("myfile.txt", "w"); fdisp (fid, "3/8 is "); fdisp (fid, 3/8); fclose (fid);
详见打开和关闭文件,了解如何使用fopen
和fclose
的详细信息.
(fid, x)
¶显示的值x在溪流上fid.
例如
fdisp (stdout, "The value of pi is:"), fdisp (stdout, pi) -| the value of pi is: -| 3.1416
请注意,的输出fdisp
总是以换行符结尾。
详见: disp.
Octave还可以读取和写入矩阵文本文件,如命令分隔列表。
(file, M)
¶(file, M, delim, r, c)
¶(file, M, key, val …)
¶(file, M, "-append", …)
¶(fid, …)
¶编写数字矩阵M到文本文件file使用分隔符。
file应该是从给定的文件名或可写文件IDfopen
.
参数delim指定用于分隔行中值的分隔符。如果未指定分隔符,则使用逗号字符,作为分隔符。
参数r指定要添加到文件开头的仅限分隔符的行数。
参数c指定每行数据前要加的分隔符数。
如果参数"-append"
的末尾file.
此外,以下关键字-值对可能会出现在参数列表的末尾:
"append"
任何一个"on"
或"off"
。详见"-append"
"delimiter"
详见delim。
"newline"
用于分隔每一行的字符。此参数有三种特殊情况。"unix"
被更改为"\n"
,"pc"
被更改为"\r\n"
和"mac"
被更改为"\r"
。任何其他值都直接用作换行符。
"roffset"
详见r。
"coffset"
详见c。
"precision"
写入文件时要使用的精度。它可以是一个格式字符串(如fprintf所用的格式字符串),也可以是多个有效数字。
dlmwrite ("file.csv", reshape (1:16, 4, 4));
dlmwrite ("file.tex", a, "delimiter", "&", "newline", "\n")
data =
dlmread (file)
¶data =
dlmread (file, sep)
¶data =
dlmread (file, sep, r0, c0)
¶data =
dlmread (file, sep, range)
¶data =
dlmread (…, "emptyvalue", EMPTYVAL)
¶从文本文件中读取数字数据file。它使用分隔符在sep和数据值之间。
如果sep未定义,字段之间的分隔符从文件本身确定。
可选标量参数r0和c0定义要读取的数据的起始行和列。这些值从零开始索引,即,第一数据行对应于零的索引。
这里的range参数指定读取哪些数据元素。参数的第一种形式是包含左上角和右下角的4元素向量[R0,C0,R1,C1]
其中索引是基于零的。指定最后一列——相当于end
索引时--使用值Inf
。或者,aspreadsheet样式的形式,例如"A2..Q15"
或"T1:AA5"
可以使用。最低字母索引'A'
指第一列。最低的行索引为1。
file应该是从给定的文件名或文件idfopen
。在较低的情况下,读取文件直到到达文件末尾。
这里的"emptyvalue"
参数可用于指定用于填充空字段的值。默认值为零。请注意,任何非数字值(如文本)也会被替换为"emptyvalue"
.
(filename, x)
¶(filename, x, dlm_opt1, …)
¶编写数字矩阵x到文件filename逗号分隔列表 (CSV)格式。
此函数等效于
dlmwrite (filename, x, ",", dlm_opt1, ...)
任何可选参数都直接传递给dlmwrite
(详见dlmwrite
).
x =
csvread (filename)
¶x =
csvread (filename, dlm_opt1, …)
¶读取逗号分隔值(CSV)文件filename为矩阵x.
注意:只能读取包含数字数据的CSV文件。
此函数等效于
x = dlmread (filename, "," , dlm_opt1, ...)
任何可选参数都直接传递给dlmread
详见dlmread
).
中的格式化数据也可以从文本文件中读取或写入。
[a, …] =
textread (filename)
¶[a, …] =
textread (filename, format)
¶[a, …] =
textread (filename, format, n)
¶[a, …] =
textread (filename, format, prop1, value1, …)
¶[a, …] =
textread (filename, format, n, prop1, value1, …)
¶此函数已过时。使用textscan
相反
从文本文件中读取数据。
文件filename根据读取和解析format。该函数的行为类似strread
除了它通过解析文件而不是字符串来起作用。详见的文档strread
详细信息。
除了支持的参数之外strread
,此函数还支持两个:
"headerlines"
:filename的前value行被跳过。"endofline"
:指定单个字符或"\r\n"
。如果没有给定值,则将从文件中推断出该值。如果设置为
(空字符串)EOL作为分隔符被忽略。可选输入n(格式重复计数)指定要使用格式字符串的次数或要读取的行数,以读取时先发生的为准。前者相当于要求数据输出向量的长度N注意,当读取具有引用多行的格式字符串的文件时,n应该是要读取的行数,而不是字符串使用的格式数。
如果格式字符串为空(不仅仅是被省略),并且文件只包含数字数据(不包括头行),textread将返回一个矩形矩阵,其列数与文件第一行数据上的数字字段数相匹配。空字段将作为零值返回。
示例:
Assume a data file like: 1 a 2 b 3 c 4 d 5 e
[a, b] = textread (f, "%f %s") returns two columns of data, one with doubles, the other a cellstr array: a = [1; 2; 3; 4; 5] b = {"a"; "b"; "c"; "d"; "e"}
[a, b] = textread (f, "%f %s", 3) (read data into two culumns, try to use the format string three times) returns a = [1; 2; 3] b = {"a"; "b"; "c"}
With a data file like: 1 a 2 b [a, b] = textread (f, "%f %s", 2) returns a = 1 and b = {"a"}; i.e., the format string is used only once because the format string refers to 2 lines of the data file. To obtain 2x1 data output columns, specify N = 4 (number of data lines containing all requested data) rather than 2.
C =
textscan (fid, format)
¶C =
textscan (fid, format, repeat)
¶C =
textscan (fid, format, param, value, …)
¶C =
textscan (fid, format, repeat, param, value, …)
¶C =
textscan (str, …)
¶[C, position, errmsg] =
textscan (…)
¶从文本文件或字符串中读取数据。
字符串str或与关联的文件fid读取,根据format。该函数是的扩展strread
和textread
。差异包括:从文件或字符串中读取的能力、附加参数和附加格式值。
输入被解释为单词、分隔符(如空白)和文字的序列。构成分隔符和空白的字符从参数决定。格式从散布在文字之间的格式值组成。在该格式中,空白是连续文字之间的分隔符,但在其他情况下会被忽略。
输出C是一个元胞数组,其中列的数量从格式值的数量决定。
输入的第一个字与格式的第一个值匹配,并放置在输出的第一列中;第二个与第二个值匹配并放在第二列中,依此类推。如果单词多于值,则重复该过程,直到所有单词都已处理完毕或达到repeat次数(见下文)。
字符串format描述str中的单词应该如何进行解析。如fscanf中所示,任何非这些值格式的(非空白)文本都被视为文本。如果两个格式值之间有一个文字,那么相同的文字必须出现在匹配单词之间的输入流中。
以下值有效:
%f
%f64
%n
该单词被解析为数字并转换为双精度。
%f32
单词被解析为数字并转换为single(float)。
%d
%d8
%d16
%d32
%d64
该单词被解析为数字,并转换为int8、int16、int32或int64。如果未指定大小,则使用int32。
%u
%u8
%u16
%u32
%u64
单词被解析为数字,并转换为uint8、uint16、uint32或uint64。如果没有指定大小,则使用uint32。
%s
该单词被解析为以空格前最后一个字符、行尾或参数中指定的分隔符结尾的字符串。
%q
该单词被解析为“带引号的字符串”。如果字符串的第一个字符是双引号(“),则该字符串包括所有内容,直到匹配的双引号为止,包括空格、分隔符和行尾字符。如果输入中出现一对连续的双引号,则输出中会用一个双引号替换。例如,输入“He said”“Hello”“将返回值”He said'Hello“。
%c
读取输入的下一个字符。这包括分隔符、空白和行尾字符。
%[…]
%[^…]
在第一种形式中,单词由最长的一行组成,该行仅由括号之间的字符组成。字符范围可以通过连字符指定;例如,%[0-9a-zA-Z]匹配所有字母数字字符(如果基础字符集是ASCII)。由于MATLAB将连字符视为文本,此扩展仅适用于字母数字字符。要在集合中包含“-”,它应该出现在括号中的第一个或最后一个;要包含“]”,它应该是第一个字符。如果第一个字符是“^”,匹配除此之外的字符。
%N…
对于%s、%c%d、%f、%n、%u,可选宽度可以指定为%Ns等。其中n是大于1的整数。对于%c,这将导致读取N个字符,而不是单个字符。对于其他值,它是读取字符数的上限;正常的分隔符可能会导致读取更少的字符。对于复数,这一限制分别适用于实数和虚数分量。对于%f和%n,允许使用像%n.Mf这样的格式值,其中M是小数点后字符数的上限;跳过后面的数字。例如,值%8.2f将12.345e6读取为1.234e7。
%*…
将跳过从转换值的剩余部分指定的单词。
literals
此外,该格式可能包含文字字符串;这些将在阅读过程中跳过。如果输入字符串与此文字不匹配,则处理终止。
对应于第一个值的解析词在第一个输出参数中返回,对于其余的值也是如此。
默认情况下,如果只有一个输入参数,format是"%f"
这意味着数字从输入读取到单列向量中。如果显式指定format为空(""
),则textscan将返回与输入的第一个数据行上的字段数相匹配的多个列中的数据。仅当输入仅为数字时,这两种方法中的任何一种都适用。
例如,字符串
str = "\ Bunny Bugs 5.5\n\ Duck Daffy -7.5e-5\n\ Penguin Tux 6"
可以用下面的代码读取
a = textscan (str, "%s %s %f");
可选的数字参数repeat可用于限制读取的项目数量:
读取所有字符串或文件,直到结束(默认值)。
读取,直到出现两个条件中的第一个:1)格式已处理N次,或2)输入的N行已处理。零(0)是repeat的可接受值。目前,%q、%c和%[…]$转换中的行尾字符不影响行数。这与不兼容MATLAB并且可能在未来发生变化。
的行为textscan
可以通过键/值对进行更改。可以识别以下属性:
"BufSize"
这指定了用于内部缓冲区的字节数。当读取大文件时,将其设置为一个大值,特别是当输入包含长字符串时,可以获得适度的速度提高。默认值为4096,或取决于n如果指定了。
"CollectOutput"
值为1或true指示textscan
在输出元胞数组中连接同一类的连续列。值为0或false(默认值)时,输出将保留在不同的列中。
"CommentStyle"
指定输入中被视为注释并将被跳过的部分。value是注释样式,可以是(1)字符串或1x1元胞字符串,跳过它右边的所有内容;(2) 从两个字符串组成的元胞数组,用于跳过第一个字符串和第二个字符串之间的所有内容。注释仅在接受空白的地方进行解析,而不充当分隔符。
"Delimiter"
如果value是字符串,value中的任何字符将用于将输入拆分为单词。如果value是字符串的元胞数组,数组中的任何字符串都将用于将输入拆分为单词。(默认值=任何空白。)
"EmptyValue"
在非空格分隔的数据中的空数值。默认值为NaN。当数据类型不支持NaN(例如int32)时,默认值为零。
"EndOfLine"
value可以是空字符,也可以是指定行尾字符的一个字符,或者是对"\r\n"
(CRLF)。在后一种情况下"\r"
, "\n"
或"\r\n"
被计算为(单个)换行符。如果没有给出值,"\r\n"
使用。
"HeaderLines"
fid的前value行被跳过。请注意,这不是指第一个非注释行,而是指任何类型的第一行。
"MultipleDelimsAsOne"
如果value为非零,则将一系列连续的分隔符(中间没有空格)视为单个分隔符。连续的删除序列不需要垂直对齐。如果没有此参数,行末尾之前的一个分隔符不会导致该行被视为以空值结尾,但行开头的一个单独分隔符会导致该行以空值开头。
"TreatAsEmpty"
处理value中出现的单个字符串(用分隔符或空格包围)作为缺省值。
"ReturnOnError"
如果设置为数字1或true,则在遇到错误时立即正常返回,例如尝试使用读取字符串%f
。如果设置为0或false,则返回一个错误且没有数据。
"Whitespace"
value中的任何字符将被解释为空白并进行修剪;空白的默认值为"
\b\r\n\t"
(注意空格)。除非空白设置为(空)AND至少一个
"%s"
提供了格式转换值,空格总是空白的一部分。
当中的字数str或fid与格式转换值数量的精确倍数不匹配,textscan
sbehavior取决于字符串或文件的最后一个字符是否为EndOfLine
参数
数据列填充有空字段,NaN或0(对于整数字段),因此所有列的长度相等
数据列未填充;textscan
返回长度不等的列
第二个输出position提供处理停止的位置,以字符为单位,从文件或字符串的开头算起。
详见: dlmread, fscanf, load, strread, textread.
这里的importdata
函数能够处理各种各样的数据。
A =
importdata (fname)
¶A =
importdata (fname, delimiter)
¶A =
importdata (fname, delimiter, header_rows)
¶[A, delimiter] =
importdata (…)
¶[A, delimiter, header_rows] =
importdata (…)
¶从文件导入数据fname.
输入参数:
\t
用于制表符。(仅适用于ASCII文件)支持不同的文件类型:
使用指定的标题行数和指定的分隔符导入ASCII表。
导入后,数据可能需要在进一步分析之前进行转换。这里的rescale
函数可以将数据集移位并规范化为指定的范围。
B =
rescale (A)
¶B =
rescale (A, l, u)
¶B =
rescale (…, "inputmin", inmin)
¶B =
rescale (…, "inputmax", inmax)
¶将矩阵元素缩放到指定的值范围。
使用单个矩阵参数A调用时,重新缩放元素以归一化到区间[0,1]。
可选输入[l, u]
将缩放A到具有下界的区间l和上限u.
可选输入"inputmin"
替换所有小于指定值的元素inmin具有inmin。同样,可选参数"inputmax"
替换所有大于指定值的元素inmax具有inmax.如果未指定,则从数据本身获取的最小值和最大值(inmin = min (A(:))
和inmax = max (A(:))
).
编程说明:应用的公式为
B= l+ ((A- inmin) ./ (inmax- inmin)).* (u- l)
如果输入矩阵A是单精度,那么输出矩阵B是单精度,但对于双精度、整数或逻辑类型的输入,则输出双精度。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2