关于python:Convert a deafultdict to numpy matrix or a CSV of 2D Matrix

Convert a deafultdict to numpy matrix or a CSV of 2D Matrix

我有一个 defaultdict,它存储数据集中每 2 个单词的数据共现。我这样做是为了获得稀疏表示,因为数据集中并非每一对都存在,因此可以节省一些内存空间。

现在有一些标准函数可以将这个 defaultdict 转换为 numpy 矩阵,如果可能的话,可以转换为一些稀疏表示。我知道如何将 dict 转换为 numpy 数组。但我正在寻找一种更有效的方式将 defaultdict 转换为矩阵。

如果不可能,是否有任何标准函数可以将 defaultdict 转换为 CSV,以便我可以使用 numpy 加载 csv。

编辑 - 我找到了使用 pandas 的解决方法。我将 defaultdict 转换为 DataFrame,然后将 DF 转换为 numpy 矩阵。还有比这更好的方法吗?

但遗憾的是,这对节省内存没有帮助。


假设您的数据如下所示:

1
2
3
data = defaultdict(int)
data[0,0] = 10
data[1,1] = 100

你想使用 scipy.sparse.coo_matrix:

1
2
3
4
5
items = list(data.items())  # list only needed for python3
vs = [v for (i,j), v in items]
ii = [i for (i,j), v in items]
j j= [j for (i,j), v in items]
matrix = scipy.sparse.coo_matrix((vs, (ii, jj))

这给出了稍微奇怪的输出:

1
2
3
>>> print matrix
  (0, 0)    10
  (1, 1)    100

但是你可以把这个对象当作一个密集矩阵来处理