我正在做一些 Matlab 作业,在概念化它处理矩阵的方式时遇到问题。在 Matlab 中,矩阵的地址为d(row,col)
format.
我已经编程了一段时间,并且总是倾向于将一维数组视为水平结构,其中第二维从下方延伸。
从计算机的角度来看,以下哪一个是“更正确”的思考数组数据结构的方法
好问题+1。
纯粹从 Matlab 编程的角度来看,最好将矩阵视为列向量序列。为什么?因为这就是 Matlab 将它们分配到计算机内存的方式。也就是说,矩阵的任何给定列中的两个连续元素将在内存中彼此相邻地分配。这有时称为“列主顺序”,用于 Fortran、R 和 Julia 等语言中。毫不奇怪,相反的顺序称为“行主序”,用于 C 和 Python 中。
这意味着 Matlab 在矩阵的列上执行操作比在行上执行操作要快得多。 @angainor 提供了很好的答案 https://stackoverflow.com/questions/12522888/arrayfun-can-be-significantly-slower-than-an-explicit-loop-in-matlab-why我几个月前提出的一个问题证明了这一事实。根据 @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 倍!
从数学角度来看,我不相信自己能给出一个好的答案。您可能会从中获得一些很棒的见解数学.stackexchange https://math.stackexchange.com/?as=1.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)