web-dev-qa-db-ja.com

変数名の変更MATLAB

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

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

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

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

15
jarhead

変数名を割り当てる場合、 matlabは「遅延コピー」を使用します なので、理由はありません。

new_name = old_name;
clear old_name;

動作しないはずです。

14
stanri

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

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

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

 classB=classA

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

たとえば、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

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

2
learnvst