数组应该被认为是水平结构还是垂直结构



我正在做一些 Matlab 作业,我在概念化它处理矩阵的方式时遇到了问题。在 Matlab 中,矩阵是d(row,col)格式的地址。

我已经编程了一段时间,并且一直倾向于将一维数组视为水平结构,第二维从下方延伸。

从计算机的角度来看,哪一种是"更正确"的数组数据结构思考方式

好问题 +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获得一些很好的见解。

相关内容

  • 没有找到相关文章

最新更新