我注意到在 R 中从右到左以二次形式计算矩阵运算明显快于从左到右,具体取决于括号的放置方式。显然它们都执行相同的计算量。我想知道为什么会这样。这与内存分配有什么关系吗?
# A: 5000 * 5000
# B: 5000 * 2
A = matrix(runif(5000 * 5000), nrow = 5000)
B = matrix(rbinom(5000 * 2, size = 2, prob = 0.3), nrow = 5000)
microbenchmark((t(B) %*% A) %*% B, t(B) %*% (A %*% B), times = 100)
Run Code Online (Sandbox Code Playgroud)
这是会话信息:
R version 4.2.0 (2022-04-22)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Big Sur 11.4
Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.2-arm64/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics …Run Code Online (Sandbox Code Playgroud) 通常,Stack Overflow R 问题可以共享只是 data.frame 输出的示例数据,而不是dput:
id cate result\n 1 1 yes 1\n 2 1 yes NA\n 3 1 no NA\n 4 2 no NA\n 5 2 yes 1\n 6 2 yes NA\n 7 2 no NA\n 8 3 no NA\n 9 3 yes NA\n10 3 no NA\n11 3 yes 1\n12 3 yes NA\n13 3 no NA\n14 3 yes NA\n15 4 yes 1\n16 4 yes NA\n17 4 yes NA\n18 4 no NA\n19 4 no NA \nRun Code Online (Sandbox Code Playgroud)\n …