2012-01-15 22 views

Respuesta

13

: es el colon operator. En este contexto, vuelve a dar forma a x en un vector de columna unidimensional.

lo que este código:

x = [ 1 3 
     2 4 ]; 

x = x(:); 

disp(x) 

resultados en:

1 
2 
3 
4 
+0

Do usted sabe si solo hace una remodelación (por lo tanto, copiará al escribir) o fuerza una copia en ese punto (incluso si x ya es una columna)? – robince

+0

@robince: Buena pregunta. Me gustaría pensar que 'x (:)' es exactamente equivalente a 'remodelar (x, [], 1)'. Pero no estoy seguro (no estoy seguro de que esto esté documentado en ninguna parte). Supongo que uno podría tratar de resolverlo a través del perfil. –

+0

Sí, lo he comprobado y parece tener una copia normal en escritura semántica (con 2011b). No sé por qué tuve la idea de que forzara una copia, tal vez sucedió en el pasado. – robince

1

x(:) reforma su matriz.

De este modo, si su matriz es

1 2 3 
5 6 7 
8 9 10 

llamando x=x(:) conjuntos x a

1 
5 
8 
2 
6 
9 
3 
7 
10 
2

Esta sintaxis se utiliza generalmente para asegurar que x es un vector columna:

x = x(:) 

Del mismo modo, esta línea se asegura de que x es un vector fila

x = x(:)' 
2

Como otros he dicho, x (:) convierte x en un vector, un vector de columna específicamente. El punto es que hace que tu código sea robusto para el usuario que proporciona un vector de fila mi accidente. Por ejemplo,

x = 1:5; 

ha creado un vector ROW. Algunas operaciones requerirán un vector de columna. Como x (:) no hace nada con un vector que ya es un vector de columna, esta es una forma de escribir un código estable y robusto.

Por supuesto, si x era una matriz de 3x4, aún convertirá x en un vector de columna de longitud 12, por lo que el mejor código debe probarse para cosas como esa, si es un problema.

1

Si x es una matriz, como la siguiente: una matriz de 3 * 3,

x=[1,2,3;4,5,6;7,8,9]; 
    x=x(:); 

La declaración x = x (:) listas de la matriz como un vector columna. la salida sería

1 
    2 
    3 
    4 
    5 
    6 
    7 
    8  
    9 

Lo mismo es lo que se obtiene cuando x es un vector fila.

por lo general, x (:) enumera los elementos de x como vector de columna.

1

Este operador le dice a matlab que intente convertir también el tipo de datos.

Por ejemplo:

Ambos tipos conjunto de datos como tipos dispares:

>> foo = uint8(0); 

>> bar = double(0); 

tipos Registro de datos con el comando "Whos":

>> whos foo bar 
    Name  Size   Bytes Class  Attributes 

    bar  1x1     8 double    
    foo  1x1     1 uint8    

asignar el uint8 en el doble con la (:) operador:

>> bar(:) = foo; 

y sigue siendo un doble

>> whos foo bar 
    Name  Size   Bytes Class  Attributes 

    bar  1x1     8 double    
    foo  1x1     1 uint8 

asignar el doble con una unit8 sin el (:) operador:

>> bar = foo; 

y cambia a un tipo de datos uint8:

>> whos foo bar 
    Name  Size   Bytes Class  Attributes 

    bar  1x1     8 uint8  
    foo  1x1     1 uint8  
Cuestiones relacionadas