假设我们正在使用一种以列优先顺序存储数组的语言。还假设我们有一个使用二维数组作为参数的函数,并返回它。我想知道您是否可以声称在调用函数时转置此数组通常是(或不是)有益的,以便使用按列操作而不是按行操作,或者转置是否否定了列操作的好处?
例如,在 RI 中有一个名为 ts 的对象,y它具有维度n x p,即我有p长度的时间序列n。
我需要y在 Fortran 中进行一些计算,其中我有两个具有以下结构的循环:
do i = 1, n
  do j= 1, p
   !just an example, some row-wise operations  on `y`
   x(i,j) = a*y(i,j) 
   D = ddot(m,y(i,1:p),1,b,1) 
   ! ...
  end do
end do
由于 Fortran(与 R 一样)使用按列存储,因此最好使用p x n数组进行计算。所以而不是
out<-.Fortran("something",y=array(y,dim(y)),x=array(0,dim(y)))
ynew<-out$out$y
x<-out$out$x
我可以使用
out<-.Fortran("something2",y=t(array(y,dim(y))),x=array(0,dim(y)[2:1]))
ynew<-t(out$out$y)
x<-t(out$out$x)
Fortran 子程序something2类似于
do i = 1, n
  do j= 1, p
   !just an example, some column-wise operations  on `y`
   x(j,i) = a*y(j,i) 
   D = ddot(m,y(1:p,i),1,b,1) 
   ! ...
  end do
end do
方法的选择是否总是取决于尺寸n,p或者是否可以说一种方法在计算速度和/或内存要求方面更好?在我的应用程序n中通常比 大得多p,在大多数情况下是 1 到 10。