2

我正在寻找一种将 matlab 中的整个工作区转换为某个类(例如double)的方法。为简单起见,我们假设工作空间中仅存在“简单”类(没有单元格或结构)。当然,我可以逐行更改每个变量,x=double(x)但是如果我有数百个变量,那是不切实际的。这是我到目前为止写的:

% # generate some variables of different classes
a1=int32(120);
a2=single(rand(10));
a3=double(rand(20));  
a4=(rand(5)>0.5);  %# logical

% # collect workspace variables using `whos` 
ws=whos;

for ii=1:size(ws,1)
     [ ? ] =   double(eval(ws(ii).name))
end

最后一行double(eval(ws{1,ii}))执行转换,但我应该如何将它的输出自动分配给原始变量名称?

如果您能想到一个,也欢迎您提出一种替代方法来转换工作区的所有变量...

4

1 回答 1

2

有趣的问题(+1)。那这个呢?

ws = whos; %# Obtain workspace
for n = 1:size(ws,1)
    eval([ws(n).name, ' = double(', ws(n).name, ');']); %# Assign to double
end

这在 R2012b 上对我有用。诀窍是更改变量类型并通过一次调用将其分配给eval.

于 2012-12-23T00:14:30.597 回答