Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 加载MAT文件而不创建中间变量_Matlab_File Io_Dataset_Structure_Mat File - Fatal编程技术网

Matlab 加载MAT文件而不创建中间变量

Matlab 加载MAT文件而不创建中间变量,matlab,file-io,dataset,structure,mat-file,Matlab,File Io,Dataset,Structure,Mat File,我正在尝试加载一个MAT文件并获取一个数据集作为输出。如果我跑 a = load('foo.mat'); a是一个结构而不是数据集。为了获得数据集,我需要运行以下代码 load('foo.mat'); a = foo; 尽管如此,在我的工作区中,我有两个相同的数据集,特别是a和foo 有没有办法只编写一行代码并导入MAT文件,然后获得一个数据集而不是两个数据集?加载时不将其分配给变量是个坏主意,因为这样很难跟踪工作区的更改 我通常会这样做 a = struct2array(load('foo

我正在尝试加载一个MAT文件并获取一个数据集作为输出。如果我跑

a = load('foo.mat');
a是一个结构而不是数据集。为了获得数据集,我需要运行以下代码

load('foo.mat');
a = foo;
尽管如此,在我的工作区中,我有两个相同的数据集,特别是a和foo

有没有办法只编写一行代码并导入MAT文件,然后获得一个数据集而不是两个数据集?

加载时不将其分配给变量是个坏主意,因为这样很难跟踪工作区的更改

我通常会这样做

a = struct2array(load('foo.mat'));
但这有一些局限性,例如,仅当foo.mat包含单个变量时才有效。

不将其分配给变量进行加载是个坏主意,因为这样很难跟踪对工作区的更改

我通常会这样做

a = struct2array(load('foo.mat'));

但这有一些局限性,例如,它仅在foo.mat包含单个变量时有效。

创建单独的函数来加载数据

function[foo] = loader()
load('foo.mat');
end
然后称之为:

a = loader();

因为函数有一个封闭的作用域,所以您可以使用mat文件中的变量名称加载这些变量。当函数返回时,您可以将值指定给所需的任何名称。

创建一个单独的函数来加载数据

function[foo] = loader()
load('foo.mat');
end
然后称之为:

a = loader();

因为函数有一个封闭的作用域,所以您可以使用mat文件中的变量名称加载这些变量。当函数返回时,您可以将该值指定给您想要的任何名称。

在secong选项中,如果您不指定a=foo,则有一个名为fooYes的数据集,请加载'foo.mat';你只有福。如果您希望它被称为a,那么在第二个文件的末尾添加clear foosnippet@Adiel是的,我忘了补充一点,我不希望在我的实际情况中变量被称为'foo',该名称很长,相对不可用。请注意,当您执行a=foo时,MATLAB不会复制数据。只要不修改这些变量中的任何一个,内存中的数据就只有一次;a=a.foo;。在secong选项中,如果不指定a=foo,则有一个名为fooYes的数据集,请加载'foo.mat';你只有福。如果您希望它被称为a,那么在第二个文件的末尾添加clear foosnippet@Adiel是的,我忘了补充一点,我不希望在我的实际情况中变量被称为'foo',该名称很长,相对不可用。请注意,当您执行a=foo时,MATLAB不会复制数据。只要不修改这些变量中的任何一个,内存中的数据就只有一次;a=a.foo;。它是芯片,实际上没有复制。只有当foo.mat包含单个变量时,它才起作用。您可以使用a=struct2arrayload'foo.mat',foo'@是的,谢谢你的澄清。我的意思是,所编写的命令适用于单个变量。只有当foo.mat包含单个变量时,它才有效。您可以使用a=struct2arrayload'foo.mat',foo'@是的,谢谢你的澄清。我的意思是,编写的命令适用于单个变量。这肯定比直接加载到活动工作区要好,但是像这样的函数的问题是,从技术上讲,函数范围中没有定义foo,这会发出警告IIRC。我建议为所有预期输出添加无效的默认值,例如NaN,或使用exist测试所有预期变量是否已实际创建。@Dev iL添加%ok将抑制文本编辑器上的警告。根据您的编码标准,这可能已经足够好了。我承认这是我的一个YOLO建议。这肯定比直接加载到活动工作区要好,但是像这样的函数的问题是,从技术上讲,foo没有在函数的范围内定义,这会发出警告IIRC。我建议为所有预期输出添加无效的默认值,例如NaN,或使用exist测试所有预期变量是否已实际创建。@Dev iL添加%ok将抑制文本编辑器上的警告。根据您的编码标准,这可能已经足够好了。我承认这是我的一个约洛建议。