我正在寻找一种方法将 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}))
执行转换,但我应该如何将其输出自动分配给原始变量名称?
如果您能想到一种方法,也欢迎您提出另一种方法来转换工作区的所有变量...
最佳答案
有趣的问题(+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
对其进行分配。
关于matlab - 将整个 matlab 工作区转换为某个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14007539/