基于矩阵的快速乘法矩阵

时间:2016-03-12 09:10:58

标签: r matrix-multiplication vector-multiplication

我需要将三个矩阵X(Nxk),FF(kxk)和X(Nxk)相乘(再次)。其中t(xi)* FF * xi,其中xi是X的第i行,i = 1:N。结果将是具有N行的单个列矩阵。乘法也可以视为X * FF * t(X)。

(Nxk)代表" N行,k列",*是代数乘法,t()转置。

问题在于N非常大(超过100k)。我找到了一些使用dropsweep进行快速乘法的建议。但他们只考虑问题的一半 - 用矩阵乘以向量。

由于X的大小,我想避免两个阶段A = X FF然后A t(X)的乘法。所以我需要的是一些函数或提示,它乘以三个矩阵一次(尽可能多),以便在R中尽可能快地进行计算。

1 个答案:

答案 0 :(得分:0)

如果您只需要 XFX' sweepMatrix是红色鲱鱼。这些帖子描述了不同的问题。

在开始more involved之前,您可以看到library(Matrix) library(microbenchmark) # sparse matrix from Matrix data(CAex) # create a possible FF set.seed(1) FF = matrix(rnorm(length(CAex)), nrow = nrow(CAex), ncol = nrow(CAex)) # not a sparse matrix CA = as.matrix(CAex) microbenchmark( matrix = CA %*% crossprod(FF, CA), Matrix = CAex %*% crossprod(FF, CAex)) # Unit: microseconds # expr min lq mean median uq max neval cld # matrix 561.170 563.952 654.8408 588.1250 651.673 1403.389 100 b # Matrix 94.356 102.866 173.1130 119.9435 165.542 1815.316 100 a 是否为您提供了足够的速度。

func cutout(us:String)
{


    let scanner = NSScanner(string:us)
    var scanned: NSString?

    if scanner.scanUpToString("://", intoString:nil) {
        scanner.scanString("://", intoString:nil)
        if scanner.scanUpToString("width", intoString:&scanned) {
            let result: String = scanned as! String
            print("result: \(result)")
            urlStringmy = result// result: google
            stringcutter()
        }
    }
}