2015-12-17 10 views
7

Ich möchte einen leeren Vektor deklarieren, der Einfügen von benutzerdefinierten Typen akzeptiert. In den folgenden Beispielen node ist ein Typ I mit classdef node ...Legen Sie den Anfangstyp eines Vektors in Matlab

Der folgende Code definiert haben, durch die Matlab-Interpreter wird abgelehnt, da der leere Vektor automatisch als Typ double, initialisiert wird, so kann es kein node in sie eingefügt haben.

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

Der folgende Code akzeptiert wird, weil der Vektor mit einem node in es initialisiert wird, so kann sie später haben Knoten eingefügt.

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

Allerdings möchte ich einen leer Vektor erstellen, die eingefügt Knoten in sie haben können. Ich kann es ungeschickt so machen:

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

Was ist ein besserer Weg? Ich suche nach etwas, das den Anfangstyp des leeren Vektors als node deklariert. Wenn ich die Syntax ausarbeiten könnte, würde es aussehen:

Aber das ist nicht gültig Matlab Syntax. Gibt es einen guten Weg, dies zu tun?

Antwort

3

Sie geben nicht an, was Ihre Klasse enthält, aber ja, im Allgemeinen ist es möglich, Array-Erstellungsfunktionen wie zeros, ones und andere auch für benutzerdefinierte Klassen zu verwenden.

Für in-built-Klassen, können Sie einen Anruf haben wie

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

eine 2-für-3-Matrix von Nullen von Datentyp uint8 zu erstellen. Die ähnliche Syntax kann auch für die entsprechenden Typen von benutzerdefinierten Klassen angewendet werden, zum Beispiel:

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

wo 'MyClass' der Name der Klasse ist, oder durch ein Beispiel zu geben:

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

Die Quelle für diese Informationen, zusammen mit einer Spezifikation, wie die Unterstützung für Array-Erstellungsfunktionen in benutzerdefinierten Klassen implementiert wird, finden Sie unter here. Ein Aufruf wie zeros(0,0,'MyClass') würde dann einen leeren Vektor vom Typ MyClass erzeugen.

8

Leeres Objekt kann durch

A = MyClass.empty; 

Es funktioniert mit Ihrer eigenen Klasse, sondern auch mit Matlab Klasse wie

A = int16.empty; 

Diese Methode kann erstellt werden, ist Multi erstellen -dimensionale leere Objekte mit dieser Syntax

A = MyClass.empty(n,m,0,p,q); 

solange eine Dimension auf Null gesetzt wird.

Siehe die doc.

+0

Sehr cool, ich hatte keine Ahnung, das existiert! – mikkola

Verwandte Themen