值缺失的两个矩阵的叉积

时间:2018-08-06 06:40:07

标签: r vectorization matrix-multiplication

我想通过使用余弦定律对距离矩阵计算进行矢量化处理。对于没有缺失值的矩阵,对于非常大的矩阵,此计算甚至比dist更快。 该函数如下所示:

vectorizedDistMat <- function(x,y) {
    an = rowSums(x^2)
    bn = rowSums(y^2)    
    m = nrow(x)
    n = nrow(y)
    tmp = matrix(rep(an, n), nrow=m) 
    tmp = tmp +  matrix(rep(bn, m), nrow=m, byrow=TRUE)
    sqrt( abs(tmp - 2 * tcrossprod(x,y) ))
}

现在,当两个矩阵相乘时,缺失值会使事情复杂化,尤其是在上述函数的最后一行中。有一种方法可以追溯性地计算缺失值,例如here。但是,当矩阵相乘时,如何有效地防止缺失值“相乘”? 例如,请参见下面的M1M2

set.seed(42)
M1 = matrix(rnorm(50), nrow = 10, ncol = 5)
M2 = matrix(rnorm(50), nrow = 10, ncol = 5)
M1[1,2] = NA
M2[3,4] = NA

此处,tcrossprod(M1, M2)在第一行和第三列中产生NA。我该如何处理它们并提前摆脱它们(例如内置函数dist)?

0 个答案:

没有答案