Il motivo per cui le strutture nell'esempio non vengono inizializzate correttamente è che la sintassi che si sta utilizzando si rivolge solo all'ultimo elemento nell'array struct. Per un array inesistente, il resto viene compilato implicitamente con le strutture che hanno il valore predefinito []
in tutti i loro campi.
per rendere questo comportamento chiaro, prova a fare una breve array con clear edges; edges(1:3) = struct('weight',1.0)
e guardando a ciascuno dei edges(1)
, edges(2)
e edges(3)
.L'elemento ha 1.0
nel suo peso come desideri; gli altri hanno []
.
La sintassi per inizializzare in modo efficiente una serie di strutture è una di queste.
% Using repmat and full assignment
edges = repmat(struct('weight', 1.0), [1 1000]);
% Using indexing
% NOTE: Only correct if variable is uninitialized!!!
edges(1:1000) = struct('weight', 1.0); % QUESTIONABLE
Nota la 1:1000
invece di 1000
l'indicizzazione in all'array bordi inizializzato.
C'è un problema con il modulo edges(1:1000)
: se edges
è già inizializzato, questa sintassi aggiornerà solo i valori degli elementi selezionati. Se i bordi hanno più di 1000 elementi, gli altri rimarranno invariati e il tuo codice sarà bacato. Oppure se edges
è di un tipo diverso, potresti ottenere un errore o un comportamento strano a seconda del tipo di dati esistente. Per sicurezza, è necessario eseguire clear edges
prima di inizializzare utilizzando la sintassi di indicizzazione. Quindi è meglio fare solo assegnamento completo con il modulo repmat
.
MA: Indipendentemente da come si inizializza un array-di-struct come questo sta andando sempre essere intrinsecamente lento per lavorare con per il set di dati più grandi. Non si possono fare reali operazioni "vettorializzate" su di esso perché i vostri array primitivi sono tutti suddivisi in per separare mxArray all'interno di ogni elemento struct. Ciò include l'assegnazione del campo nella tua domanda - non è possibile vettorizzare ciò. Invece, dovresti cambiare una struttura di array come suggerisce la risposta di Brian L's.
fonte
2014-03-17 16:53:16
questo post potrebbe essere d'aiuto: http://stackoverflow.com/questions/4166438/how-do-i-define-a-structure-in-matlab/4169216#4169216 – Amro