在Numpy中读/写一个大的对称矩阵

时间:2015-01-07 07:42:23

标签: numpy

我有一个大的(大于我的RAM的一半)n-by-n对称矩阵S.我想把它写入磁盘,只使用~n ^ 2/2空间,以后能够读取它。写作部分是:

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

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

1 个答案:

答案 0 :(得分:0)

在这种情况下,普通的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