Dobre pytanie +1.
Czysto z perspektywy programowania Matlaba najlepiej jest myśleć o macierzy jako sekwencji wektorów kolumnowych. Czemu? Ponieważ w ten sposób Matlab przydziela je do pamięci komputera. Oznacza to, że dwa kolejne elementy w dowolnej kolumnie macierzy zostaną przydzielone obok siebie w pamięci. Jest to czasami określane jako "kolumna-główne zamówienie" i jest używane w językach takich jak Fortran, R i Julia. Odwrotnie jest, co nie jest zaskakujące, nazywane "rzędowo-głównym porządkiem" i jest używany w językach C i Python.
Wynika z tego, że Matlab będzie znacznie szybszy w wykonywaniu operacji na kolumnach macierzy niż w wierszach. @angainor pod warunkiem great answer na moje pytanie kilka miesięcy temu, który pokazuje ten fakt. Na podstawie wglądu @ angainor, oto jest użytecznym Test prędkości do uruchomienia:
M = 1000; %# Number of iterations over each method
T = 1000; %# Number of rows
N = 1000; %# Number of columns
X = randn(T, N); %# Random matrix
%# Loop over the rows of a matrix and perform a sum operation on each row vector
tic
for m = 1:M
for t = 1:T
sum(X(t, :));
end
end
toc
%# Loop over the columns of a matrix and perform a sum operation on each column vector
tic
for m = 1:M
for n = 1:N
sum(X(:, n));
end
end
toc
na moim komputerze, wynik testu jest:
Elapsed time is 9.371870 seconds. %# Looping over rows
Elapsed time is 1.943970 seconds. %# Looping over columns
Innymi słowy, operacje wykonywane na kolumnach są prawie 5 razy szybciej niż operacje wykonywane na rzędach!
Z matematycznego punktu widzenia nie ufam sobie, aby dać dobrą odpowiedź. Prawdopodobnie możesz uzyskać dobre spostrzeżenia z math.stackexchange.
Matematycznie, konwencja ma również wykorzystywać wektory kolumnowe. Oznacza to, że produkt wewnętrzny jest zapisany jako WT X (gdzie T jest transpozycją, w jest wektorem kolumny, a X jest macierzą). Możesz zrobić to w inny sposób, ale musisz odwrócić tę kolejność wszędzie, gdzie ją zobaczysz, a ta metoda jest bardziej przydatna w przypadku większości wyrażeń złożonych. –