R语言自定义矩阵运算函数与内置函数基准测试方法咨询
R自定义矩阵运算函数基准测试方法
1 安装加载性能测试工具
R生态中常用microbenchmark包做轻量级的函数性能对比,首先安装加载:
install.packages("microbenchmark") library(microbenchmark)
2 准备测试样本
建议用不同规模的非奇异方阵做测试,固定随机种子保证测试可复现:
set.seed(123) # 生成2/3/5阶随机测试方阵,不建议用超过5阶的矩阵,你的自定义行列式是递归实现,复杂度为O(n!),阶数过高耗时会非常长 test_mat_2 <- matrix(rnorm(4), nrow = 2) test_mat_3 <- matrix(rnorm(9), nrow = 3) test_mat_5 <- matrix(rnorm(25), nrow = 5)
2.1 提前验证函数正确性
性能测试前先确认自定义函数和内置函数输出结果一致,避免逻辑错误影响测试结论:
# 验证行列式结果 all.equal(Det_fn(test_mat_3), det(test_mat_3)) # 验证矩阵求逆结果,允许小范围浮点误差 all.equal(Inv_fn(test_mat_3), solve(test_mat_3), tolerance = 1e-6)
3 分功能执行对比测试
microbenchmark会自动重复运行指定次数的函数,统计多维度的耗时指标:
3.1 行列式计算性能对比
det_bench <- microbenchmark( 自定义Det_fn = Det_fn(test_mat_3), 内置det = det(test_mat_3), times = 100 # 重复运行100次统计结果 ) # 输出统计结果,单位默认是微秒 print(det_bench) # 可视化对比 boxplot(det_bench, log = "y", main = "行列式计算性能对比")
3.2 矩阵求逆性能对比
inv_bench <- microbenchmark( 自定义Inv_fn = Inv_fn(test_mat_3), 内置solve = solve(test_mat_3), times = 100 ) print(inv_bench) boxplot(inv_bench, log = "y", main = "矩阵求逆性能对比")
4 结果说明
输出结果会包含最小耗时、下四分位数、中位数、均值、上四分位数、最大耗时6项指标,参考中位数判断性能差距即可:你的递归实现的矩阵运算在3阶矩阵下就会比内置函数慢上百倍甚至更多,这是正常的,R内置矩阵运算底层调用了高度优化的LAPACK/BLAS线性代数库,避免了递归展开和循环的巨大开销。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

