1

いくつかの変数をその名前で自動的に保存する簡単な関数を作成しました

function savevariables(varargin)
    %1st argument varible1, 2nd argument 'namevar1', 3rd variable2, 4th 'namevar2', etc 

    for i = 1:2: length(varargin)

        savedata = varargin{1,i};
        namedata=genvarname(varargin{i+1});
        save(strcat('/home/.../path/',namedata),'savedata')

        clear savedata
        clear namedata

    end

end

問題は、変数をワークスペースに再度ロードすると、変数の名前が savedata になることです... 元の名前にしたいのですが..

だから私は2つのベクトルを持っていると仮定します

Test1 = [1 2 3 4 5];
Test2 = [4 5 6];

関数を呼び出します

function savevariables(Test1, 'Test1',Test2,'Test2');

変数 Test1 を Test1 として保存し、Test2 を Test2 として保存して、それらをワークスペースに再度ロードしたときに変数 Test1 と Test2 を持つようにしたいと考えています。

4

3 に答える 3

4

これに役立つ便利なヘルパー関数がいくつかあります。

特に:inputname変数名を抽出するので、再度指定する必要はありません。親ワークスペースで実行さevalinれるため、変数を再割り当てする必要はありません。 genvarnameとにかく有効な変数名を提供する必要があるため、必要ありません。

例を示しましょう。

function savevariables(varargin)
for i=1:numel(varargin)
    str = sprintf('save %s %s',inputname(i),inputname(i));
    evalin('caller',str)
end

使用例:

  1. サンプル変数を作成します。my_sample = rand(10);
  2. 電話:savevariables(my_sample)

my_sample.mat乱数の 10x10 マトリックスを含むファイルが作成されます。を呼び出しclearてからload my_sample. 次に、呼び出すwhosと、次の出力が得られます。

  Name            Size            Bytes  Class     Attributes

  my_sample      10x10              800  double      

または、質問で指定したサンプルの呼び出しは次のようになります。

savevariables(Test1,Test2)
于 2013-09-30T10:13:03.500 に答える
1

-struct機能のオプションを使用できますsavesome_struct.foo次に、個別の変数として保存できますfoo

function savevariables(varargin)

% swap varargin(2 * k) and varargin(2 * k + 1) to use struct()
varargin = flipud(reshape(varargin, 2, []));

varargin(1,:) = genvarname(varargin(1,:));
s = struct(varargin{:});

for varname = fieldnames(s).'
  save(['/home/.../path/' varname{1}], '-struct', 's', varname{1});
end
end

実行すると、、、、、およびのsavevariables(1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'd', 6, 'd');6 つのファイルが得られます。a.matb.matc.matd.matd1.matd2.mat

于 2013-09-30T10:41:15.647 に答える
1

あなたはそれを行うことができますが、evalこれは決して最良の選択肢ではありませんが、それを回避する方法がわかりません. 私は確かに1つあると確信しています。しかし、これはうまくいくはずです。

function savevariables(varargin)
    %1st argument varible1, 2nd argument 'namevar1', 3rd variable2, 4th 'namevar2', etc 

    for i = 1:2: length(varargin)

        namedata=genvarname(varargin{i+1});
        filename = strcat('/home/.../path/',namedata);
        eval([namedata, ' = varargin{1,i};']);
        save(filename, namedata)

        clear savedata
        clear namedata

    end

end

次のように呼び出します。

savevariables(Test1, 'Test1', Test2, 'Test2')

次に、ワークスペースでload test1呼び出される変数を取得するときTest1

于 2013-09-30T10:01:39.913 に答える