Reading/Writing Numpy 中的大型对称矩阵

Reading/Writing a large symmetric matrix in Numpy

我有一个很大的(大于我 RAM 的一半)n×n 对称矩阵 S。我想将它写入磁盘,只使用 ~n^2/2 space 并且能够稍后阅读。写作部分为:

S[np.tril_indices(n)].tofile(fid)

和阅读:

S = np.zeros((n,n))
S[np.tril_indices(n)]=np.fromfile(fid)
S = S + np.tril(S, -1).T

问题是我创建的所有临时数组都不适合内存

在这种情况下,简单的 Python 循环似乎是最快和最简单的解决方案。当适合内存时,它也比矢量化方法更快,至少在我对 Numpy 1.8.2 和不太快的硬盘驱动器作为存储介质的测试中是这样。所以你可以考虑:

with open('test.dat', 'wb') as fid:
    for i in range(n):
        S[i,i:].tofile(fid)

并且:

S = np.empty((n, n))
with open('test.dat', 'rb') as fid:
    for i in range(n):
        data = np.fromfile(fid, count=n-i)
        S[i,i:] = data
        S[i:,i] = data