¿Cuáles son las ventajas de usar vectores de columna en lugar de vectores de fila?

No hay ventajas matemáticas ya que los dos son equivalentes. Cualquier cosa que se pueda expresar usando uno permite una expresión alternativa usando el otro.

Computacionalmente, puede haber ventajas al usar uno sobre el otro. Por ejemplo, en Matlab / Octave, las matrices se almacenan en el orden principal de la columna. Si desea almacenar varios vectores en la misma matriz, los vectores deben almacenarse como columnas de la matriz en lugar de como filas para reducir el número de errores de caché que se producen al acceder a los vectores.

Aquí hay un código de Matlab / Octave que demuestra esta idea:

n = 1e3; %número de columnas
m = 1e4; %número de filas
x = rand (m, n); % crea una matriz aleatoria
y = rand (m, n); %y otro
tic% inicia el temporizador
para i = 1: n% loop sobre cada COLUMNA
tmp = punto (x (:, i), y (:, i)); % punto producto de dos columnas
fin
toc% detiene el temporizador
x = x ‘; % transpone la matriz para que todas las columnas se conviertan en filas
y = y ‘; % transponer y también
tic% inicia el temporizador
para i = 1: n% de bucle sobre cada FILA
tmp = dot (x (i, :), y (i, :)); % punto producto de dos filas
fin
toc% detiene el temporizador

Los dos bucles del código hacen EXACTAMENTE el mismo conjunto de operaciones matemáticas. Literalmente, cada multiplicación y suma que se realiza es la misma en cada una. Sin embargo, el segundo bucle dura aproximadamente de 6 a 9 veces más en las dos máquinas que probé. SEIS VECES TANTO como para hacer exactamente el mismo trabajo. ¿Como puede ser?

La razón tiene que ver con dónde se encuentran en la memoria los números en los que el chip necesita trabajar. En el primer caso, siempre están uno al lado del otro. Entonces, cuando el chip carga un montón de números en la memoria caché, todos los números que carga probablemente serán útiles al mismo tiempo. En el segundo caso, los números se necesitan una fila a la vez, pero se almacenan en la memoria columna por columna. Entonces, cuando el chip carga un montón de números que están juntos, solo uno será útil en ese momento. (Los otros no serán necesarios hasta diferentes momentos a través del ciclo). Por lo tanto, la memoria caché tiene que limpiar frecuentemente números inútiles para dejar espacio para el siguiente número que necesita. Todos estos errores de caché toman tiempo. De hecho, toman mucho más tiempo que todas las multiplicaciones y adiciones reales.

Por lo tanto, usar vectores de fila en Matlab / Octave es una mala idea. Usar vectores de columna es una buena idea. Pero eso es específico de Matlab / Octave. Otros idiomas son diferentes, por lo que es una buena idea averiguar cuál será el mejor orden para evitar errores de caché en el idioma en el que esté trabajando.

Los dos son matemáticamente equivalentes. Una posible razón para la preferencia de usar el vector de columna en papel es:
Simplemente se ve mejor. Es más compacto, ocupa menos espacio.

Compare las dos siguientes expresiones matemáticamente equivalentes:
[matemáticas]
A b = \ begin {pmatrix}
a_ {11} y a_ {12} y a_ {13} y a_ {14} \\
a_ {21} y a_ {22} y a_ {23} y a_ {24} \\
a_ {31} y a_ {32} y a_ {33} y a_ {34} \\
a_ {41} y a_ {42} y a_ {43} y a_ {44}
\ end {pmatrix} \ begin {pmatrix}
b_ {1} \\
b_ {2} \\
b_ {3} \\
b_ {4}
\ end {pmatrix}
[/matemáticas]
y
[matemáticas]
(A b) ^ T = \ begin {pmatrix}
b_1 y b_2 y b_3 y b_4
\ end {pmatrix}
\ begin {pmatrix}
a_ {11} y a_ {21} y a_ {31} y a_ {41} \\
a_ {12} y a_ {22} y a_ {32} y a_ {42} \\
a_ {13} y a_ {23} y a_ {33} y a_ {43} \\
a_ {14} y a_ {24} y a_ {34} y a_ {44}
\ end {pmatrix}
[/matemáticas]
(El orden de la matriz y el vector en la segunda expresión se puede cambiar si redefine la multiplicación de la matriz, por lo que este no es un problema a considerar).

Porque los vectores a menudo se usan junto con matrices. Por lo general, el primero representa un elemento en un espacio vectorial, mientras que el segundo representa una transformación en el espacio vectorial.
Escribir una matriz ya tomaría [math] mn [/ math] “slots” en papel. El uso del vector de columna aumentaría el espacio total utilizado para [matemática] m (n + 1) [/ matemática], mientras que el uso de vectores de fila aumentaría el espacio total utilizado para [matemática] 2mn [/ matemática] (es decir, mucho más).

Michael Lamar ya discutió la diferencia en los programas computacionales. Me gustaría mencionar que el esquema de almacenamiento depende del idioma. Por ejemplo, Matlab / FORTRAN almacena matrices multidimensionales en orden de columna mayor, mientras que C / C ++ las almacena en orden de fila mayor. Por lo tanto, es mejor almacenar vectores como filas (en lugar de columnas) en una matriz bidimensional cuando usa C / C ++.
No necesita preocuparse por el almacenamiento de matrices unidimensionales en la mayoría de los idiomas.

Es así que cuando una transformación lineal [matemática] T: \ mathbf R ^ n \ to \ mathbf R ^ m [/ matemática] está representada por una matriz [matemática] m \ veces n [/ matemática] [matemática] A, [/ math] el argumento de la transformación aparece a la derecha. Es decir, [matemática] T (\ mathbf v) = \ mathbf w [/ math] se puede escribir como una multiplicación matricial [math] A \ mathbf v = \ mathbf w. [/ Math] Eso solo funciona cuando los vectores [ math] \ mathbf v [/ math] y [math] \ mathbf w [/ math] se escriben como matrices de columnas.

He visto un libro de texto donde los vectores se escribieron como matrices de filas a la izquierda. Entonces obtienes [math] \ mathbf vA = \ mathbf w. [/ Math] Ese libro de texto no tuvo éxito.

La definición particular que utilizamos para la multiplicación de matrices se estableció en 1800. Si la multiplicación de matrices se hubiera definido de manera diferente, los vectores podrían haberse escrito como matrices de filas a la derecha.