matlab initialiser des objets
Je joue avec la programmation orientée objet en MATLAB, et j'ai le constructeur suivant:
fonction obj = Escadron(num_fighters, num_targets, time_steps) si nargin == 0 num_targets = 100; time_steps = 100; num_fighters = 10; fin obj.num_shooters = num_fighters; pour iShooter = 1:obj.num_shooters un(iShooter) = Tir(num_targets, time_steps); fin obj.ShooterArray = a; obj.current_detections = zeros(num_fighters, num_targets); fin
Que temporaire de la variable 'a' odeur terrible. Est-il une meilleure façon d'initialiser un tableau d'objets, je souhaite qu'il y ait un push/pop méthode. Je suis sûr qu'il ya une meilleure façon de le faire.
- Étonnamment, vous pouvez également attribuer des
Shooter
tableau directement dansShooter
constructeur: mathworks.com/help/techdoc/matlab_oop/brd4btr.html - je suis de l'allocation dans le constructeur, connaissez-vous d'une manière plus propre de le faire que d'utiliser une variable temporaire? Peut-être que je suis absent quelque chose.
- "Le moyen le plus propre" est subjectif ... Mon message: il ne travaille pas seulement dans
Squadron
mais aussi directement dansShooter
constructeur. - eu vous. Je vois ce que vous dites. C'est plus propre.
- double possible: Comment préallouer un tableau de classe dans MATLAB?
Vous devez vous connecter pour publier un commentaire.
Semble que vous essayez de créer un tableau de manipuler des objets (Tireurs) et de le stocker à l'intérieur de la propriété d'un autre objet descripteur (un Squardron). J'ai eu un très problème similaire discussion qui pourraient vous aider.
En bref: Ce que vous faites peut-être pas assez - mais peut-être déjà assez bien.
Lors de la création d'un tableau dans Matlab, il est généralement une bonne Idée de faire un peu de pré-affectation à la réserve de la mémoire, ce qui accélère considérablement les performances.
Dans un cas normal, quelque chose comme ceci:
(ici a=1:1000; serait encore mieux)
Pour les objets de la pré-allocation fonctionne en attribuant à l'un des objets de la dernière champ dans le tableau. Matlab puis remplit les autres champs avant que avec des objets (poignées), qu'il crée en appelant le constructeur de cet objet sans arguments (voir Matlab aider). Donc un pré-allocation pour les objets pourrait ressembler à ceci:
ou tout simplement
S'assurant de Tir peut être appelé sans argument, vous devriez être en mesure de faire quelque chose comme:
Cependant, il s'avère que pour certaines raisons, cette direct le stockage d'un tableau d'objets dans une autre propriété de l'objet crée une très mauvaise performance. (Probablement la matrice de pré-allocation ne fonctionne pas bien dans ce cas). Donc à l'aide d'un auxiliaire de la variable et la distribution de la gamme complète à la fois à la propriété est dans ce cas c'est une bonne idée pour augmenter les performances.
Je voudrais essayer:
De nouveau - pour plus de détails, consultez cette discussion
Il ya un couple de façons de gérer cette situation...
construire des tableaux d'objets dans le constructeur:
Vous pourriez modifier votre
Shooter
classe telle que lorsque vous transmettez des tableaux de valeurs, il crée un tableau d'objets. Ensuite, vous pouvez initialiserShooterArray
comme suit:De la réplication des instances d'une classe de valeur:
Si
Shooter
est un valeur de la classe, et chaque objet va être exactement le même (c'est à dire que vous n'avez pas initialiser l'une de ses propriétés par défaut de valeurs aléatoires), alors vous pouvez créer qu'un seul objet et de le reproduire à l'aide de REPMAT:Malheureusement, si
Shooter
est une sous-classe de la poignée de classe, vous ne pouvez pas simplement reproduire ce que vous pouvez avec une classe de valeur. Vous auriez fait être réplication références à un seul objet, lorsque vous en avez vraiment besoin d'un certain nombre d'objets distincts, chacun avec leur propre et unique référence. Dans un tel cas, votre code actuel est probablement la meilleure solution.