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でうまくいきました。秘訣は、変数の型を変更し、への1回の呼び出しでそれを割り当てることevalです。

于 2012-12-23T00:14:30.597 に答える