【发布时间】:2014-12-16 06:53:15
【问题描述】:
我有一个 MxN 矩阵 X,其中 M 是可管理的,但 N 非常大。该矩阵是术语文档语料库格式的维基百科,为您提供一些上下文。我需要计算:
X.dot(X.T)
我知道结果(维度 MxM)将适合内存,但矩阵 X 不会。
如何最好地计算乘积,逐批迭代 X 列?我将语料库保存为文件,并且能够逐个迭代每个文档(即 X 的列)。有没有办法迭代构建 X * X.T?
我碰巧与 Numpy 合作过,但实际上任何对算法的描述都会很棒。
【问题讨论】:
-
如果
X = np.memmap(..)会发生什么? -
您是否尝试过使用稀疏矩阵? docs.scipy.org/doc/scipy/reference/sparse.html
-
cmets
M is manageable, but N is very large和NxN) will fit into memory, but ... X will not似乎没有意义 -
没错,我的意思是(MxM),这是正确的。编辑了问题。至于稀疏矩阵,这实际上是我现在正在使用的,但它不允许足够大的 Ns。我会研究内存映射!
-
@pdowling 你需要的内存大小至少是
X的两倍,而不是Y = np.empty_like(X); np.dot(X, X.T, out=Y)
标签: python algorithm numpy scipy linear-algebra