programacion matrices index empty create concatenate concatenar array accessing arrays matlab matrix

arrays - matrices - Usar transposición versus ctransponer en MATLAB



matrices en matlab programacion (4)

¡Interesante pregunta!

Definitivamente diría que es una buena práctica usar .'' cuando solo quieres transponer, incluso si los números son reales y, por lo tanto, '' tendrían el mismo efecto". Las principales razones para esto son:

  1. Claridad conceptual : si necesita transponer, simplemente transponer. No arroje una conjugación innecesaria. Es una mala práctica. Te acostumbrarás a escribir '' para transponer y no notarás la diferencia. Algún día escribirás '' cuándo .'' debería ser usado. Como ejemplos probables de esto, vea esta pregunta o esta .

  2. Futuro-proofness . Si un día en el futuro aplica su función a entradas complejas, el comportamiento cambiará repentinamente y le será difícil encontrar la causa. Créame, sé lo que digo 1 .

Por supuesto, si está utilizando entradas reales pero una conjugación tendría sentido para entradas complejas, use '' . Por ejemplo, si está definiendo un producto de puntos para vectores reales, puede ser apropiado usar '' , porque si desea usar entradas complejas en el futuro, la transposición conjugada tendría más sentido .

1 En mis primeros días en Matlab, me tomó un buen tiempo rastrear un cierto problema en mi código, que resultó ser el uso de '' cuando debería haberlo usado .'' . Lo que realmente me enojó es que fue mi profesor quien dijo que '' quería decir transponer! Olvidó mencionar el conjugado y, por lo tanto, mi error. Lecciones que aprendí: '' no es .'' ; y los profesores pueden decirte cosas que están completamente equivocadas :-)

Al transponer vectores / matrices en MATLAB, he visto y usado solo el operador '' (apostropohe) durante mucho tiempo.

Por ejemplo:

>> v = [ 1 2 3 ]'' v = 1 2 3

Sin embargo, esta es la transposición conjugada tal como lo descubrí recientemente o ctranspose .

Esto parece solo importar cuando hay números complejos involucrados, donde si quieres transponer una matriz sin obtener el conjugado, necesitas usar el .'' Operador

¿Es una buena práctica usar también el .'' para matrices y vectores reales, entonces? ¿Qué deberíamos enseñar a los principiantes de MATLAB?


Esto es en realidad un tema de debate entre muchos programadores de MATLAB. Algunos dicen que si sabes lo que estás haciendo, puedes seguir adelante y utilizar '' si sabes que tus datos son puramente reales y de usar .'' si tus datos son complejos Sin embargo, algunas personas (como ) abogan por el hecho de que definitivamente debes usar .'' todo el tiempo para que no te confundas

Esto permite el manejo adecuado de la entrada en funciones en caso de que los datos que se esperan para sus entradas en estas funciones resulten ser complejos. Hay un momento en que se requiere una transposición compleja, como calcular la magnitud al cuadrado de un vector complejo. De hecho, Loren Shure en uno de sus compendios de MATLAB (no puedo recordar cuál) afirmó que esta es una de las razones por las que se introdujo la transposición compleja.

Mi sugerencia es que deberías usar .'' siempre si su objetivo es transponer datos. Si quieres hacer algo de aritmética compleja, entonces usa '' y .'' dependiendo de qué operación / computación estás haciendo. Obviamente, las buenas prácticas de Luis Mendo se han contagiado.


Hay dos casos para distinguir aquí:

  1. Tomando la transposición por razones no matemáticas, como si tuviera una función que trata los datos como matrices, en lugar de vectores matemáticos, y necesita la entrada de corrección de errores para obtener el formato que espera.
  2. Tomando transposición como una operación matemática.

En este último caso, la situación debe dictar cuál es la correcta, y probablemente solo una de las dos opciones sea correcta en esa situación. Lo más frecuente es tomar la transposición del conjugado, que corresponde a '' , pero hay casos en los que debes tomar la transposición recta y luego, por supuesto, debes usarla .'' .

En el primer caso, sugiero no usar ninguno de los operadores de transposición. En su lugar, debe utilizar la reshape o simplemente insistir en que la entrada sea correcta y arrojar un error si no es así. Esto distingue claramente esta instancia de "informática" de instancias matemáticas verdaderas.


Mi punto de vista muy parcial: la mayoría de los casos que uso '' son puramente" formales ", también conocidos como no relacionados con cálculos matemáticos. Lo más probable es que quiera rotar un vector como la secuencia de índice 1:10 por 90 grados.

Casi nunca uso '' matrices porque es ambiguo : la primera pregunta que debes responder es ¿por qué quieres hacer una transposición?

Si la matriz se definió originalmente en una dirección incorrecta, prefiero definir la matriz en la correcta que debería ser, pero no girarla después.

Para transponer una matriz para un cálculo matemático , utilizo explícitamente transpose y ctranspose . Porque al hacerlo, el código es más fácil de leer (no tiene que enfocarse en esos pequeños puntos) y depurar (no tiene que preocuparse por los puntos que faltan). Realice los siguientes trabajos, como el producto de puntos, como de costumbre.