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
- ¿Cuáles son las ventajas de usar vectores de fila en lugar de vectores de columna?
- ¿Cómo se estudian mejor las pruebas en álgebra lineal?
- Cómo encontrar rápidamente k vectores propios más pequeños para una matriz dispersa grande en forma de A ^ T * A en C ++
- ¿Qué partes del álgebra lineal son relevantes para la informática?
- ¿Cuál es la diferencia entre una matriz sin procesar y una matriz SVD proyectada (con rango completo)?
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.