Octave/Matlab: l'Ajout de nouveaux éléments d'un vecteur
Ayant un vecteur x
et j'ai du ajouter un élément (newElem
) .
Quelle est la différence entre
x(end+1) = newElem;
et
x = [x newElem];
?
Vous devez vous connecter pour publier un commentaire.
x(end+1) = newElem
est un peu plus robuste.x = [x newElem]
ne fonctionnera que six
est une ligne de vecteur, si elle est un vecteur colonnex = [x; newElem]
doit être utilisé.x(end+1) = newElem
, cependant, travaille pour de ligne et de colonne de vecteurs.En général cependant, la croissance de vecteurs doivent être évités. Si vous faites cela, beaucoup de choses, qu'il peut apporter à votre code vers le bas à un rampement. Pensez-y: la croissance d'une matrice s'agit d'allouer un nouvel espace, de tout recopier de plus, l'ajout de ce nouvel élément, et le nettoyage de l'ancien mess...Tout à fait une perte de temps si vous saviez la bonne taille à l'avance 🙂
x
doit être initialisé en premier!x
(de taillen
)", je supposen
à être non-nul, et le vecteur d'être initialisé déjà 🙂end
plutôt que de certaines variablesn
(qui pourrait être unglobal
pour tout ce que vous savez!) est le plus universel, robuste-pas-coût moyen d'allerx(end+1)=...
sansx
cours d'initialisation et je suis presque certain que vous pouvez le faire dans MATLAB ainsiJuste pour ajouter à @ThijsW réponse, il y a une augmentation considérable de la vitesse de l'avantage de la première méthode par rapport à la méthode de concaténation:
J'ai eu ces moments de course dans 2012b cependant quand j'ai couru le même code sur le même ordinateur dans matlab 2010a-je obtenir
Donc je suppose que la vitesse de l'avantage ne s'applique qu'aux plus récentes versions de Matlab
x(end+1)
cas est assez récente (R2012a ou alors...). Je vagualey souviens avoir lu quelque chose comme ça dans certains changenotes à smoe point. J'ai aussi obtenir des résultats très différents sur mon APU/Matlab 2010, mais je ne sais pas si c'est dû à l'Matlab version ou l'APU...Comme mentionné précédemment, l'utilisation de
x(end+1) = newElem
a l'avantage qu'il permet de concaténer votre vecteur par un scalaire, peu importe si votre vecteur est transposée ou pas. Par conséquent, il est plus robuste pour l'ajout de scalaires.Cependant, ce ne doit pas être oublié, c'est que
x = [x newElem]
travaillera également lorsque vous essayez d'ajouter de multiples éléments à la fois. En outre, cette généralise un peu plus, naturellement, pour le cas où vous voulez concaténer des matrices.M = [M M1 M2 M3]
Dans l'ensemble, si vous voulez une solution qui vous permet de concaténer votre vecteur
x
avecnewElem
qui peut ou peut ne pas être un scalaire, cela devrait faire l'affaire: