2011-01-21 23 views
5

Parece que esto debería ser fácil, pero no soy un experto y Google no ayuda.Matlab: ¿forma fácil de obtener los vectores de base estándar?

Me gustaría una forma elegante en Matlab de producir los vectores básicos ordenados estándar para un espacio n-dimensional. Por ejemplo, un comportamiento similar al siguiente:

>> [e1, e2] = SOB(2); 
>> e1 

    e1 = 1  0 

>> e2 

    e2 = 0  1 

estoy esperando para una 1-liner y realmente no quiero escribir una función para algo tan simple.

Gracias

Respuesta

17

Por qué no

A = eye(N); 

continuación A(:,i) es su base de vectores i-ésimo

4

¿Dos líneas estarían bien? Cree la matriz de identidad con EYE, copie los vectores en una matriz de celdas usando MAT2CELL, luego distribúyalos con DEAL.

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

2 líneas podrían funcionar ... Aunque (para mí) eso es bastante críptico :) – des4maisons

+0

@ des4maisons: He editado un poco para aclarar. Básicamente, si combina vectores de base en una matriz, obtendrá la identidad. Entonces construyo la matriz de identidad y la desarmo. – Jonas

+0

Yah, pensé que esa era la manera de hacerlo, simplemente no sabía cómo, así que gracias. Además, ¿quiso vincularse a mat2cell o usar num2cell? – des4maisons

0

si función anónima, es más conveniente.

e = @(x) eye(size(A))(:,x); 

Si el tamaño de A es 6 por 6, esto devuelve 6 por 1 vector.

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

'' Error:() -indexing debe aparecer al final en una expresión de índice'' – User1291

+0

@ User1291 ¿Ha definido la matriz 'A'? – MiaeKim

+0

no importa. Ya obtengo ese error si codigo el tamaño (por ejemplo, '' eye (5) (:, 3) '') – User1291

1

Para obtener un único vector de la base, dicen que el vector de la base estándar k -ésimo en N dimensiones, se puede utilizar:

yourbasisvector = double(1:N == k) 

1:N produce el vector 1 2 ... N, que == k elemento a elemento prueba de igualdad con k; double convierte los valores lógicos en números.

Cuestiones relacionadas