2015-12-17 3 views
7

ユーザ定義型の挿入を許可する空のベクトルを宣言したいと思います。次の例ではnode私は空のベクトルが自動的にdouble型として初期化されるので、次のコードは、MATLABインタプリタによって拒否されclassdef node ...Matlabでベクトルの初期型を設定する

で定義したタイプなので、nodeがそれに挿入することはできません。ベクターは、その中にnodeで初期化されているので

>> a = []; 
>> a(1) = node(1,1,1); 
The following error occurred converting from node to double: 
Conversion to double from node is not possible. 

以下のコードは受け入れられ、それは後にノードを挿入することができます。

>> a = [node(1,1,1)]; 
>> a(1) = node(1,2,1); 

はしかし、私はそれに挿入されたノードを持つことができますベクトルを作成したいです。私はこのように扱いにくいです:

>> a = [node(1,1,1)]; 
>> a(1) = []; 

良い方法はありますか?空のベクトルの初期型をnodeと宣言しているものを探しています。私は構文を作ることができれば、それは次のようになります。

>> a = node[]; 

しかし、それは有効なMATLAB構文ではありません。これを行う良い方法はありますか?

答えて

3

あなたのクラスに含まれているものは指定しませんが、一般的には、ユーザ定義のクラスに対しても同様にzeros,onesなどの配列作成関数を使用することができます。ビルトインクラスの場合

、あなたはデータ型uint8のゼロの2行3列の行列を作成するための

A = zeros(2,3,'uint8');

のような呼び出しがあるかもしれません。同様の構文は、インスタンスのために、ユーザー定義クラスの適切なタイプに適用することができます。

A = zeros(2,3,'MyClass');

'MyClass'があなたのクラスの名前であるか、例を挙げて:

p = MyClass(...); 
A = zeros(2,3,'like',p); 

この情報のソースと、ユーザー定義クラスでの配列作成機能のサポートの実装方法の指定は、hereです。

zeros(0,0,'MyClass')のようなコールでは、タイプMyClassの空のベクトルが生成されます。

8

空のオブジェクトは、それはあなた独自のクラスで動作しますが、また、そのような

A = int16.empty; 

としてのMatlabのクラスでこのメソッドは、マルチを作成することができます

A = MyClass.empty; 

によって作成することができますこの構文を使用して次元の空オブジェクト

つの次元がゼロに設定されている限り、10
A = MyClass.empty(n,m,0,p,q); 

です。

docを参照してください。

+0

非常にクールな、私は考えがこの存在していませんでした! – mikkola

関連する問題