bri*_*tar 5 r numeric matrix linear-algebra matrix-multiplication
什么是最简洁,最快速,最数字稳定,最R-idiomatic方式在R中进行左右矩阵划分?我明白左派inv(A)*B通常都是用solve(a,b),但怎么样B*inv(A)?真的是最好的计算方法t(solve(t(A),t(B)))吗?
我没有比 更好的解决方案B %*% solve(A),但我确实想指出,通常solve(A,B)比 更快且数值更稳定solve(A) %*% B。
> A = matrix(rnorm(10000),100,100)
> B = matrix(rnorm(10000),100,100)
> microbenchmark(solve(A,B), solve(A) %*% B, t(solve(t(B),t(A))), B %*% solve(A))
Unit: microseconds
expr min lq mean median uq max neval
solve(A, B) 481.695 604.2435 722.2512 677.2455 761.735 1280.888 100
solve(A) %*% B 628.243 830.2095 1056.3947 927.0130 1204.682 5275.030 100
t(solve(t(B), t(A))) 603.855 792.1360 1164.7210 924.0895 1122.184 10351.307 100
B %*% solve(A) 645.119 784.1990 1070.4751 927.9400 1097.601 7866.591 100
Run Code Online (Sandbox Code Playgroud)