我有一个大的(大于我的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
问题是我创建的所有临时数组都不适合内存
答案 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