2015-12-17 13 views
7

Chciałbym zadeklarować pusty wektor, który akceptuje wstawianie typów zdefiniowanych przez użytkownika. W poniższych przykładach node jest rodzajem Mam zdefiniowane z classdef node ...Ustaw początkowy typ wektora w Matlab

Poniższy kod jest odrzucony przez interpreter Matlab ponieważ pusty wektor jest automatycznie inicjowany jako typ podwójnej, a więc nie może mieć node włożona do niego.

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

poniżej kodu przyjęcia, ponieważ wektor jest inicjowane z node w nią, dzięki czemu może mieć później dodaje węzłów.

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

Jednakże chcę stworzyć pusty wektor, który może mieć węzły wstawione do niego. Mogę zrobić to niezręcznie w ten sposób:

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

Co jest lepszy sposób? Szukam czegoś, co deklaruje początkowy typ pustego wektora, który ma być node. Gdybym mógł nadrobić składnię, wyglądałby tak:

>> a = node[]; 

Ale to nie jest poprawna składnia Matlaba. Czy jest to dobry sposób na zrobienie tego?

Odpowiedz

3

Nie określasz, co zawiera twoja klasa, ale tak, ogólnie rzecz biorąc, możliwe jest użycie funkcji tworzenia macierzy, takich jak zeros, ones i innych dla klas zdefiniowanych przez użytkownika.

Dla wbudowany klas, może mieć połączenia jak

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

aby utworzyć macierz 2-by-3 zer typu danych uint8. Podobna składnia może być również stosowana do odpowiednich typów klas zdefiniowanych przez użytkownika, na przykład:

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

gdzie 'MyClass' to nazwa klasy, albo dając przykład:

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

Źródło tej informacji wraz ze specyfikacją implementacji obsługi procedur tworzenia tablic w klasach zdefiniowanych przez użytkownika można znaleźć pod adresem here.

Wywołanie, takie jak zeros(0,0,'MyClass'), spowoduje utworzenie pustego wektora typu MyClass.

8

Pusty obiekt może zostać stworzony przez

A = MyClass.empty; 

Działa z własnej klasy, ale również z klasy Matlaba takich jak

A = int16.empty; 

Metoda ta jest w stanie stworzyć wielofunkcyjnego -wymiarowe puste obiekty o tej składni

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

tak długo, jak jeden wymiar jest ustawiony na zero.

Zobacz doc.

+0

Bardzo fajnie, nie miałem pojęcia, że ​​to istnieje! – mikkola

Powiązane problemy