【问题标题】:Convert a deafultdict to numpy matrix or a CSV of 2D Matrix将 deafultdict 转换为 numpy 矩阵或 2D 矩阵的 CSV
【发布时间】:2016-09-28 04:39:38
【问题描述】:

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

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

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

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

但遗憾的是,这无助于节省内存。

【问题讨论】:

  • 你能举一个你的默认字典的例子吗?还有预期的输出?
  • 在访问已经存在的值时,defaultdict 与常规 dict 相同。这个dict 的键和值是什么?词或索引?你想要什么样的阵列布局?如果@Eric 的答案不合适,给我们一个小例子 - 字典和所需的数组(可能是稀疏的)。
  • 关于从字典中构建稀疏矩阵。 stackoverflow.com/questions/27770906/…

标签: python numpy matrix


【解决方案1】:

假设您的数据如下所示:

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

你想使用scipy.sparse.coo_matrix:

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))

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

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

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

【讨论】:

  • 还有一个dok 稀疏格式,它是dict 的子类。键是(i,j) 元组。我在其他 SO 问题中发现,将值添加到 dok 的最快方法是使用另一个字典中的 update
猜你喜欢
  • 2016-08-25
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多