Python/Numpy:有效存储非稀疏大型对称数组?

Ali*_*rze 5 python arrays storage numpy matrix

我正在尝试将数据以 200 万个对称 100x100 矩阵的形式存储在我的硬盘上。这些矩阵的几乎所有元素都是非零的。我目前将这些数据保存在 200 个 npy 文件中;每个大小为 5.1GB 并包含 100000x100x100 numpy 数组。这会占用超过 1TB 的硬盘空间。

无论如何,我可以使用矩阵对称的事实来节省硬盘驱动器上的空间吗?

use*_*424 2

要仅存储矩阵的上半部分(包括对角线),您应该能够执行以下操作:

import numpy as np

data = np.load([filename])

flat = []
for a in data:
    flat.append(a[np.triu_indices(100)])

np.savez([filename], *flat)
Run Code Online (Sandbox Code Playgroud)

然后将它们加载回来:

import numpy as np

flat = np.load([filename])

data = []

for name, a in flat:
    arr = np.zeros((100,100),dtype=[dtype])
    arr[np.triu_indices(100)] = a
    arr = arr + arr.T - np.diag(arr.diagonal)
    data.append(arr)

data = np.array(data)
Run Code Online (Sandbox Code Playgroud)