Esta es una pregunta difícil para google. Soy nuevo en Matlab y he visto la siguiente declaración, pero no puedo ver cómo funciona. ¿Qué doe x = x (:) hacer?¿Qué significa x = x (:) en matlab, donde x es un vector?
Respuesta
:
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
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
x (:) transforma la matriz a un vector columna.
y en realidad no es tan difícil [google] (https://www.google.com/search?q=matlab+colon+operator+vector). – voidengine
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(:)'
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.
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.
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
- 1. Acceso matriz por cadena clave x, donde x es "123"
- 2. ¿Por qué es (1/2) * x diferente de 0.5 * x?
- 3. F # - qué coincide con ... con | :? X como x significa?
- 4. line, = plot (x, sin (x)) ¿Qué significa coma?
- 5. DONDE x EN (5) vs DONDE x = 5 ... ¿por qué usar IN?
- 6. ¿Es x + = 1 más eficiente que x = x + 1?
- 7. ¿`X x = x = X();` legal C++?
- 8. ¿Qué significa exactamente var x: * en actionscript?
- 9. "x = ++ x" ¿es realmente indefinido?
- 10. ¿Por qué usar "vector.at (x)" es mejor que "vector [x]" en C++?
- 11. int x = 10; x + = x--; en .Net - ¿Por qué?
- 12. ¿Qué significa (? <= X) en regex?
- 13. ¿Qué significa \ x en c/C++?
- 14. ¿Qué significa "{x: Static}" en XAML?
- 15. ¿Qué es x-tmpl?
- 16. ¿Qué es "x && foo()"?
- 17. ¿Cuál es el resultado de X (X, X)?
- 18. Suma donde el valor es x
- 19. ¿Cuál es la diferencia entre X = X ++; vs X ++ ;?
- 20. std :: cadena x (x);
- 21. ¿por qué `x [0]` devuelve un vector de longitud cero?
- 22. ¿Por qué no es `Encoding.UTF8.GetBytes (Encoding.UTF8.GetString (x)) == x`
- 23. ¿Qué significa var {u, v, w} = x; significa en Javascript?
- 24. Es "int i = x ++, j = x ++;" ¿legal?
- 25. definir el uso (x) (x) = (x)
- 26. ¿Qué es "undefined x 1" en JavaScript?
- 27. Si x es la lista, ¿por qué funciona x + = "ha", mientras que x = x + "ha" arroja una excepción?
- 28. ¿Migración de Starteam a X? (donde X es uno de: svn/git/hg/bzr ...)
- 29. En la declaración "std :: vector <X> f();", ¿es "std :: vector <X>" una instanciación?
- 30. ¿Por qué debería usar operator.itemgetter (x) en lugar de [x]?
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
@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. –
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