0

如果我使用 matlab 的加载函数,我通常最终会做这样的事情:

temp = load('filename.mat');
realData = temp.VarName;
clear temp

或者

realData = load('filename.mat');
realData = realData.VarName;

这些方法中是否有任何一种优于其他方法,尤其是在内存使用方面?还是有更直接的方法来避免这种临时结构?

谢谢托马斯

4

3 回答 3

6

如果您知道您只需要 matfile 中的特定变量,您可以这样做

realData = load('filename.mat', 'VarName');

有关加载命令的更多信息,请参阅Matlab 文档

于 2010-09-07T09:09:50.123 回答
0

好吧,如果你只是这样做load('filename.mat');,所有的变量都会在当前范围内结束。

不过,我怀疑您的任何一种方法都有任何有意义的内存成本。Matlab 使用写时复制。

于 2010-09-07T09:02:15.047 回答
0

您可能想尝试使用“importdata”命令:

   szFilePath = 'c:\dirName\myData.mat';
   myData = importdata( szFilePath );

这避免了在没有输出参数的情况下使用 load 时将变量隐式放置到作用域中,以及不必要的 assignment-from-struct 命令。

正如 Oli 所指出的,惰性复制(写时复制)行为意味着内存考虑没有实际意义。

从维护/可读性的角度来看,importdata 有几个优点:

  1. 明确命名在工作区中创建的变量可以更清楚地记录函数正在做什么。
  2. 消除对结构赋值操作的必要性可以从源文件中删除分散注意力和不相关的操作。

我正在使用 MATLAB R2010a。

于 2010-09-13T12:13:10.743 回答