我有一个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;
对于所有i从1到360的范围?
如何进行基本的乘法和重塑操作
set.seed(15) #for reproducibility
R <- matrix(rexp(9, rate=.1), ncol=3);
R
# [,1] [,2] [,3]
# [1,] 2.042281 1.760375 2.9230182
# [2,] 19.466458 6.628580 0.1818078
# [3,] 2.544348 27.541514 4.1325714
dd <- array(sapply(1:360, `*`, R), dim=c(dim(R), 360))
dd[,,1]
# [,1] [,2] [,3]
# [1,] 2.042281 1.760375 2.9230182
# [2,] 19.466458 6.628580 0.1818078
# [3,] 2.544348 27.541514 4.1325714
dd[,,2]
# [,1] [,2] [,3]
# [1,] 4.084562 3.520749 5.8460364
# [2,] 38.932916 13.257161 0.3636157
# [3,] 5.088697 55.083027 8.2651427
dd[,,10]
# [,1] [,2] [,3]
# [1,] 20.42281 17.60375 29.230182
# [2,] 194.66458 66.28580 1.818078
# [3,] 25.44348 275.41514 41.325714
sapply
进行更复杂的修改吗?例如K = I + sin(i*pi/180)*R,其中I是3x3单位矩阵? - Christofer Östlin\
*`的地方放置任何函数
function(i,R) I+sin(i*pi/180)*R)`。 - MrFlick
Alyr <- function(i){R*i}
。 - CJBR
开始并每次加上R
?我不认为乘法会拖慢你的速度,虽然我相信它需要很少的时间。 - Frank