sec*_*ula 11 arrays matlab multidimensional-array
我正在做一些Matlab的家庭作业,我遇到的问题是概念化它解决矩阵的方式.在Matlab中,矩阵是d(row,col)
格式的地址.
我已经编程了一段时间,并且总是倾向于将一维数组视为水平结构,第二维从下方延伸出来.
从计算机的角度来看,其中哪一种是更"正确"的思考阵列数据结构的方式
Col*_*ers 15
好问题+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
Run Code Online (Sandbox Code Playgroud)
在我的机器上,测试的结果是:
Elapsed time is 9.371870 seconds. %# Looping over rows
Elapsed time is 1.943970 seconds. %# Looping over columns
Run Code Online (Sandbox Code Playgroud)
换句话说,对列执行的操作几乎比对行执行的操作快5倍!
从数学的角度来看,我不相信自己能给出一个好的答案.您可以从math.stackexchange获得一些很好的见解.
归档时间: |
|
查看次数: |
2079 次 |
最近记录: |