R稀疏矩阵幂
R sparse matrix power
我正在使用 Matrix 包创建一个包含大量零的大型 (~14000x14000) 稀疏矩阵。有谁知道计算这个矩阵的幂的最佳方法吗?
我试过 A_pow2 = A%^%2 但我收到错误:A %^% 2 错误:不是矩阵。这是一个简单的例子 returns 同样的错误:
A = matrix(3,2,2)
A = Matrix(A,sparse=TRUE)
Apow2 = A%^%2
(感谢@Roland 的评论编辑)
自定义函数或许可以解决您的问题。根据 ?expm::`%^%`
的文档
Compute the k-th power of a matrix. Whereas x^k computes element wise
powers, x %^% k corresponds to k - 1 matrix multiplications, x %*% x
%*% ... %*% x.
我们可以写一个新的中缀运算符来执行乘法k-1次。不确定它的扩展性如何,但它适用于较小的示例。
> library(Matrix)
> library(expm)
> A = matrix(3,2,2)
> B = Matrix(A,sparse=TRUE)
>
> # changed lapply to rep list
> `%^^%` = function(x, k) Reduce(`%*%`, rep(list(x), k))
> # per Roland for loop approach will be better on memory
> `%^^%` = function(x, k) {for (i in 1:(k - 1)) x <- x %*% x; x}
>
> as.matrix(B%^^%2)
[,1] [,2]
[1,] 18 18
[2,] 18 18
> A%^%2
[,1] [,2]
[1,] 18 18
[2,] 18 18
我正在使用 Matrix 包创建一个包含大量零的大型 (~14000x14000) 稀疏矩阵。有谁知道计算这个矩阵的幂的最佳方法吗?
我试过 A_pow2 = A%^%2 但我收到错误:A %^% 2 错误:不是矩阵。这是一个简单的例子 returns 同样的错误:
A = matrix(3,2,2)
A = Matrix(A,sparse=TRUE)
Apow2 = A%^%2
(感谢@Roland 的评论编辑)
自定义函数或许可以解决您的问题。根据 ?expm::`%^%`
Compute the k-th power of a matrix. Whereas x^k computes element wise powers, x %^% k corresponds to k - 1 matrix multiplications, x %*% x %*% ... %*% x.
我们可以写一个新的中缀运算符来执行乘法k-1次。不确定它的扩展性如何,但它适用于较小的示例。
> library(Matrix)
> library(expm)
> A = matrix(3,2,2)
> B = Matrix(A,sparse=TRUE)
>
> # changed lapply to rep list
> `%^^%` = function(x, k) Reduce(`%*%`, rep(list(x), k))
> # per Roland for loop approach will be better on memory
> `%^^%` = function(x, k) {for (i in 1:(k - 1)) x <- x %*% x; x}
>
> as.matrix(B%^^%2)
[,1] [,2]
[1,] 18 18
[2,] 18 18
> A%^%2
[,1] [,2]
[1,] 18 18
[2,] 18 18