Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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 - Fatal编程技术网

Matlab 确定最近计算的变量并将其保存到.mat文件

Matlab 确定最近计算的变量并将其保存到.mat文件,matlab,Matlab,有没有办法在Matlab中找到最近评估的变量who或whos似乎不会在工作区中为变量添加时间戳 这里是一个用例。我希望有一个通用函数“probe()”,它可以在Matlab脚本/代码中的任何地方调用。我希望将最近计算的变量保存到.mat文件中,而不必传递与所保存变量相关的任何自定义参数。这可能吗 ans接近我试图实现的目标,但它将不可用,因为我的代码在赋值的左侧有变量。如果您在命令提示符下执行此操作,您可以做的是检索自您将MATLAB打开到文本数组以来的整个命令历史记录。一旦这样做,您只需在最后

有没有办法在Matlab中找到最近评估的变量
who
whos
似乎不会在工作区中为变量添加时间戳

这里是一个用例。我希望有一个通用函数“probe()”,它可以在Matlab脚本/代码中的任何地方调用。我希望将最近计算的变量保存到.mat文件中,而不必传递与所保存变量相关的任何自定义参数。这可能吗


ans
接近我试图实现的目标,但它将不可用,因为我的代码在赋值的左侧有变量。

如果您在命令提示符下执行此操作,您可以做的是检索自您将MATLAB打开到文本数组以来的整个命令历史记录。一旦这样做,您只需在最后一行中搜索等号之前的变量。。。。假设您执行了
lhs
语句。您还需要考虑在命令提示符中回显变量,而不使用左侧语句。我们可以很容易地找到答案

您需要在文本数组的最后第二行进行搜索,因为gnovice捕获历史记录的代码需要额外的一行代码。此代码会被捕获到历史记录中,而这不是您想要的。因此,您需要查看最后第二行/条目

因此,请执行以下操作:

history = com.mathworks.mlservices.MLCommandHistoryServices.getSessionHistory; %// From gnovice's post
historyText = char(history);

lne = historyText(end-1,:); %// Get second last line

%// Do a regexp and retrieve the text with or without the equals sign
var = regexp(lne, '\w*', 'match');

%// Get first match which is the variable before any symbols or just the word
var = var{1};

这里有一个简单的例子。这是我在尝试上述代码之前的完整命令历史记录:

>> A = rand(10,10);
>> B = A + 2;
>> D = B * 3;
运行上述代码后,我得到for
var

var = 

D

类似地,如果我们只是评估答案,而不在左侧指定任何内容:

>> A = rand(10,10);
>> B = A + 3;
>> A
运行上述代码,我得到:

var = 

A

最后,如果要将此变量保存到磁盘,可以使用
eval
语句来实现这一点:

>> name_of_file = 'file.mat';
>> eval(['save ' name_of_file ' ' var]);

上面的代码将采用您指定的文件名。。。因此,在本例中,它将是
test.mat
,然后使用
var
作为要保存的工作区变量调用save命令。

这是一个基本的草图,您可以使用以下函数执行此操作:

它将创建一个.mat-文件,其中包含一个struct
probeOut
和字段
xz

再次加载.mat-文件后:

>> probeOut.xz

ans =

    42

如果您有多个输出参数,它也可以工作:

y = 5;
[xz,z] = deal(42,5);

probe
您的.mat-文件将如下所示:


案件

y = 5;
[xz] = deal(42,5);

probe

也包括。

这是在MATLAB命令提示符下执行,还是在函数脚本文件中执行?欢迎使用Stackoverflow!请考虑接受其中一个答案,如果他们帮助你,点击左边的绿色复选标记。通过这种方式,您可以指示系统您的问题已得到解决。非常感谢。
y = 5;
[xz,z] = deal(42,5);

probe
y = 5;
[xz] = deal(42,5);

probe