Подтвердить что ты не робот

Если массивы следует рассматривать как горизонтальные или вертикальные структуры

Я работаю над некоторым домашним заданием Matlab, и у меня возникли проблемы с концепцией того, как он обращается к матрицам. В Matlab матрица - это адрес в формате d(row,col).

Я программировал какое-то время и всегда имел тенденцию думать о одномерном массиве как о горизонтальной структуре со вторым размером, простирающимся снизу.

Какой из них является "более правильным" способом мышления о структуре данных массива с компьютерной точки зрения

4b9b3361

Ответ 1

Хороший вопрос +1.

Чисто с точки зрения программирования Matlab лучше всего рассматривать матрицу как последовательность векторов столбцов. Зачем? Потому что именно так Matlab выделяет их в память ваших компьютеров. То есть два последовательных элемента в любом столбце матрицы будут распределены рядом друг с другом в памяти. Это иногда называют "порядок столбцов" и используется на таких языках, как Fortran, R и Julia. Противоположность, неудивительно, называется "порядок строк" ​​и используется в C и Python.

Следствием этого является то, что Matlab будет намного быстрее при выполнении операций над столбцами матрицы, чем в строках. @angainor предоставил отличный ответ на мой вопрос несколько месяцев назад, который демонстрирует этот факт. Основываясь на понимании @angainor, вот полезный тест скорости для запуска:

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

На моей машине результат теста:

Elapsed time is 9.371870 seconds. %# Looping over rows
Elapsed time is 1.943970 seconds. %# Looping over columns

Другими словами, операции, выполняемые в столбцах, почти в 5 раз быстрее операций, выполняемых в строках!

С математической точки зрения я не верю себе, чтобы дать хороший ответ. Вероятно, вы могли бы получить отличную информацию из math.stackexchange.