2017-06-21 78 views
1

我目前正在研究需要乘以某些稀疏矩阵的项目。“dgTMatrix”的行/列重新缩放范围

在R和Matrix包中工作我通过像“Diagonal”或简单的“Matrix”等命令创建矩阵,例如,

A <- Diagonal(10) 

B <- kronecker(Matrix(diag(10)),t((rep(1,10)))) 

C <- A%*%B 

矩阵AdgTMatrix类的而矩阵BddiMatrix类的。

有什么办法可以加速乘法的计算吗?

我在想RcppArmadillo,但我不知道如何处理这些类,如果它甚至表现更好。

+0

你可以看一下'SparseM'包,它允许在稀疏矩阵上进行基本的线性代数运算。 – lmo

+0

对不起,这个小例子的尺寸不匹配。现在应该工作。 – Cello

+0

实际上是这样。我只是想说出我需要什么,而不管上面的例子。所以你也可以选择其他结果不明显的例子。 – Cello

回答

0

所以基本上你正在做一个dgTMatrix行重新缩放。令v是缩放因子的向量。

## B <- Diagonal(x = v) %*% B 
[email protected] <- [email protected] * v[[email protected] + 1] 

通过使用v[[email protected] + 1],列重新缩放非常相似。

## B <- B %*% Diagonal(x = v) 
[email protected] <- [email protected] * v[[email protected] + 1] 

当然,你需要有Bv之间的贴合尺寸。

+0

非常感谢,这已经有所帮助。但是对于当我们真的不知道矩阵乘法对应于行/列重新缩放的情况,是否有任何方法来计算两个稀疏矩阵或甚至稀疏和非稀疏矩阵的矩阵乘法比'A %*%B'? – Cello

+0

@Cello我会说%*%已经够快了 –