【发布时间】:2018-05-30 20:15:16
【问题描述】:
我有一本这样的字典,
{(0, 1, 2, 3, 0, 0): 0, (19, 49, 0, 0, 0, 0): 12, (85, 1, 87, 0, 0, 0): 22, (78, 79, 80, 81, 0, 0): 20, (0, 17, 18, 19, 0, 0): 8, (24, 25, 26, 27, 0, 0): 6, (62, 63, 64, 65, 0, 0): 16}
如何将其转换为 coo_matrix?我尝试了以下但我得到Error: int object is not subscriptable
data,row, col = [], [], []
for k, v in diction.items():
r = int(k[0][1:])
c = int(k[1][1:])
data.append(v)
row.append(r-1)
col.append(c-1)
# Create the COO-matrix
coo = coo_matrix((data,(row,col)))
我需要这样做,因为 LightFM.fit 方法只接受 coo 矩阵作为参数。
预期输出(coo 矩阵):
(0, 1, 2, 3, 0, 0) 0
(19, 49, 0, 0, 0, 0) 12
(85, 1, 87, 0, 0, 0) 22
【问题讨论】:
-
这个的预期输出是什么?
-
@RoadRunner 请查看编辑
-
我知道(或期望)他们想要什么。但是你似乎是 ML 的新手,应该先掌握这些基本的数据格式,然后再问这样的问题。尝试将您的预期输出转换为 MATRIX 形式。这就是 coo_matrix 能给你的全部。如果您的预期输出不像您的预期输出那样是矩阵(2-d!),那么您无法做到这一点。您可能要求 one_hot_encoding 或其他一些预处理。但这与 scipy 的稀疏矩阵没有太大关系。格式非常标准,您将从 scikit-learn 的文档中学到很多东西。访问它并阅读预处理教程。
-
并且由于您的项目用户又名矩阵分解模型有点特殊,因此事情变得更简单(与我上面的评论相比)。但是你所展示的和这个模型的映射,嗯......我没有看到。这些矩阵的稀疏表示通常具有 3 个值;项目用户价值。现在将其与您的(维度太多)进行比较。并确保您知道矩阵和张量之间的区别!用于(低阶)张量分解的(工作)软件并不多。
-
这行不通。看起来你想要一个 6d 数组。 scipy sparse 包只创建二维矩阵。
标签: python dictionary scipy sparse-matrix