15

グローバル環境にエクスポートする前に変数名を変更したいのですが、データが非常に大きいため、別の変数にコピーして最初の変数を削除することはできません。

データは特定の変数に読み込まれ、変更することもできません。異なるバックグラウンドジョブで複数回使用されるため、名前を変更して名前を変更して送信し、ジョブが混ざらないようにします。ジョブのロードと名前の変更など。

基本的には、コマンドウィンドウで、ワークスペースでマウスを使ってできることを実行します。

誰かがそれを行う方法を知っていますか?

4

2 に答える 2

15

変数名を割り当てるとき、matlabは「レイジーコピー」を使用するため、次の理由はありません。

new_name = old_name;
clear old_name;

動作しないはずです。

于 2012-06-15T08:57:38.190 に答える
2

メモリコピーなしでこれを行うことを考えることができる唯一の方法は、ハンドルクラスのサブクラスであるオブジェクトで元のデータをラップすることです。

http://www.mathworks.co.uk/help/techdoc/matlab_oop/brfylzt-1.html

次に、通常の構文を使用してハンドルクラスを「コピー」できます。

 classB=classA

..ただし、同じデータのエイリアスを作成しているだけです(classBへの変更はclassAに反映されます)。これは、MATLABでポインターのようなセマンティクスに最も近いものです。

たとえば、というファイルを作成しmyHandle、次のテキストを貼り付けてクラスを定義します。。

classdef myHandle < handle

    properties
        data
        moreData
    end

    methods
    end

end

その後、これを通常の構造と同じように使用できます。コマンドラインから実行します。

>> x = myHandle

x = 

  myHandle handle

  Properties:
        data: []
    moreData: []

  Methods, Events, Superclasses

...次にデータを入力できます。。。

>> x.data = [1 2 3 4];
>> x.moreData = 'efg';

...元のオブジェクトにデータが入力されると、。と入力して元のデータのエイリアスを作成できます。。

>> y = x

変更されると、x興味深いことが起こります。y

>> y.data = [33 44 55 66];
>> disp(x)
x = 

  myHandle handle

  Properties:
        data: [33 44 55 66]
    moreData: 'f'

  Methods, Events, Superclasses

エイリアス名の1つをクリアすることもできます。。

 clear x

..そしてデータはデータの他のハンドルで引き続き利用可能ですy。メモリは、それを参照するハンドルがなくなったとき(参照カウントがゼロに達したとき)にのみ解放されます。

于 2012-06-15T08:19:21.057 に答える