【发布时间】:2015-10-12 11:43:48
【问题描述】:
我有一个 R 脚本,它通过标量乘法系统地执行对 3x3 矩阵的更改,如下所示
R <- matrix(rexp(9, rate=.1), ncol=3);
for (i in 1:360) {
K = i*R;
...
}
并使用修改后的矩阵在循环中进行进一步计算。但是,循环本身嵌套在另外两个 for 循环中,使得脚本非常慢。所以我的问题是,我怎样才能对这个最内层循环进行矢量化,使得结果是一个大小为 3x3x360 的三维数组 A,其中
A[,,i] = i*R;
对于从 1 到 360 的所有 i?
【问题讨论】:
-
有趣的问题。生成的数组将非常规则且可预测,因为每个“层”将通过一组标量与所有其他层相关。您的代码有什么办法可以解决需要创建很大的数组。你可以使用
Alyr <- function(i){R*i}。 -
在您的循环中,每次都以
R开头并添加R?不过,我不认为乘法会减慢你的速度。我很确定这需要很少的时间。 -
这里简化了修改。我实际上在做的是在矩阵表示法中使用Rodrigues' rotation formula 来计算大量的旋转矩阵。然后我将这些应用于大量向量并评估结果。所以“真正的”修改看起来像 K = I + sin(thetapi/180)*T + (1-cos(thetapi/180))*(T%*%T),其中 I 是单位矩阵,T 是叉积矩阵。所以不幸的是,数组中的不同层不是那么可预测的......