8
votes

MATLAB: moyen facile d'obtenir les vecteurs de base standard?

On dirait que cela devrait être facile, mais je ne suis pas d'expert et Google ne vous aide pas.

Je voudrais un moyen élégant dans Matlab de produire les vecteurs de base ordonnés standard pour un espace n-dimensionnel. Par exemple, comportement similaire à ce qui suit: xxx

Je suis espérant pour un 1-liner et ne veut pas vraiment écrire une fonction Pour quelque chose de si simple.

merci


0 commentaires

4 Réponses :


4
votes

Deux lignes seraient ok? Créez la matrice d'identité avec Eye , copier des vecteurs dans une matrice de cellule à l'aide de mat2cell , puis les distribue avec Deal .

tmp = mat2cell(eye(N),N,ones(N,1));
[e1,e2,...,eN] = deal(tmp{:})


4 commentaires

2 lignes pouvaient travailler ... cependant (pour moi) qui est plutôt cryptique :)


@ Des4Maisons: J'ai modifié un peu pour clarifier. Fondamentalement, si vous combinez des vecteurs de base dans un tableau, vous obtenez l'identité. Donc, je construis la matrice d'identité et je l'écarte.


Yah, j'ai pensé que c'était la façon de le faire, je ne savais pas comment, alors merci. Aussi, vouliez-vous créer un lien vers MAT2Cell ou utiliser NUM2Cell?


@ Des4Maisons: Oups, il devrait être mat2cell. Merci de le pointer.



22
votes

Pourquoi pas

A = eye(N); 


0 commentaires

0
votes

Si vous fonctionne anonyme, il est plus pratique.

e(1) = [1;0;0;0;0;0]


3 commentaires

Erreur: () -Indexing doit apparaître en dernier dans une expression d'index.


@ User1291 Avez-vous défini matricielle A ?


Peu importe. J'obtiens déjà cette erreur si je codé la taille (E.G. Eye (5) (:, 3) )



7
votes

Pour obtenir un Vecteur de base em> em>, dites le vecteur k code> -th de la base standard dans n code> dimensions, vous pouvez utiliser:

yourbasisvector = double(1:N == k)


1 commentaires

Ceci est incroyable. J'ai essayé de venir avec ou de trouver une solution comme celle-ci pendant des semaines. Vous pouvez même étendre cette approche en faisant double (1: n == [k1, k2, k3] ') pour obtenir plusieurs vecteurs d'identité à la fois.