Python 构建超大余弦矩阵

Python 构建超大余弦矩阵,python,c++,r,bigdata,trigonometry,Python,C++,R,Bigdata,Trigonometry,我需要为长度为500的89000个向量的向量集构建一个余弦矩阵(即每个向量组合之间的余弦距离矩阵),最终生成89000x89000个矩阵。我目前的方法似乎效率很低,导致处理时间很长(例如,使用长度为500的52000个向量的向量集构建52000x52000矩阵需要约36小时) 我目前的解决方案使用的是R版本3.0.1(2013-05-16),运行在64位版本的ubuntu 13.10上,运行在Intel Core i7 4960X CPU@3.60GHz x 12平台上,内存为64GB。尽管我使

我需要为长度为500的89000个向量的向量集构建一个余弦矩阵(即每个向量组合之间的余弦距离矩阵),最终生成89000x89000个矩阵。我目前的方法似乎效率很低,导致处理时间很长(例如,使用长度为500的52000个向量的向量集构建52000x52000矩阵需要约36小时)

我目前的解决方案使用的是R版本3.0.1(2013-05-16),运行在64位版本的ubuntu 13.10上,运行在Intel Core i7 4960X CPU@3.60GHz x 12平台上,内存为64GB。尽管我使用了64位系统,但仍然会遇到从R中的本机子函数返回的向量长度错误(例如,错误:…用于提取的索引太多(>2^31-1));这个问题似乎没有解决办法。因此,我当前的解决方案使用bigmemory包中的big.matrix对象。我还使用了doParallel软件包来利用工作站上的所有12个处理器内核

这是我当前使用的代码:

setSize <- nrow(vectors_gw2014_FREQ_csMns) #i.e. =89,095

COSmatrix <- filebacked.big.matrix(
        #set dimensions and element value type
        setSize, setSize, init=0,
        type="double",
        backingpath = './COSmatrices',
        backingfile    = "cosMAT_gw2014_VARppmi.bak", 
        descriptorfile = "cosMAT_gw2014_VARppmi.dsc" 
        )

#initialize progress bar
pb <- txtProgressBar(min = 0, max = setSize, style = 3)
feErr <- foreach(i=1:setSize) %dopar%  {
    COSmatrix <- attach.big.matrix("./COSmatrices/cosMAT_gw2014_FREQ_csMns.dsc")
    setTxtProgressBar(pb, i)
    for (j in 1:setSize)
    {   
        if (j < i) 
        {
            COSmatrix[i,j] <- cosine(   as.vector(vectors_gw2014_FREQ_csMns[i,],mode="numeric"),
                                        as.vector(vectors_gw2014_FREQ_csMns[j,],mode="numeric") )

            COSmatrix[j,i] <- COSmatrix[i,j]

        }
        else break
    }#FOR j
}#FOREACH DOPAR i
close(pb)

setSize首先,我建议去掉“if”语句,将“for(j in 1:setSize)”替换为“for”(j in 1:I)”,但老实说,这仍然不是一个非常重要的优化……我认为该矩阵不适合内存空间。。。。更不用说允许使用12个处理器进行并行处理,每个处理器都需要空间。只是想知道,程序是否受到CPU的限制?看起来这样大小的矩阵很容易耗尽内存。有可能对算法进行分区吗?谢谢@Tomasz Posłuszny,每一点都有帮助。@BondedDust,如果你仔细看代码(我应该提到这一点),我正在使用一个备份文件(在250GB固态硬盘上)的大矩阵对象来解决这个问题;使用文件备份可以避免内存限制,但会以性能为代价。
COSmatrix <- attach.big.matrix("./COSmatrices/cosMAT_gw2014_FREQ_csMns.dsc")