【问题标题】:Convert 1-D array into sparse matrix将一维数组转换为稀疏矩阵
【发布时间】:2023-04-05 23:14:01
【问题描述】:

我正在做一个推荐项目,我有这样的数据:

ID Movie
1   A
2   B
3   C
4   D
..
..

我想将这个数据框创建成这样的稀疏矩阵:

     1  2  3  4 ....n

1    1  0  0  0     0
2    0  1  0  0     0
3    0  0  1  0     0
4    0  0  0  1     0
.
.
n    0  0  0  0     1

基本上行和列都包含移动的ID,当行和列元素具有相同的值时,值为1。我想将其表示为

的稀疏格式
 <sparse matrix of type '<class 'numpy.int32'>'
    with 58770 stored elements in Compressed Sparse Row format>

我尝试了以下操作:

 - np.diag(items)
 - csr_matrix(items.values)

但我无法弄清楚。谁能帮帮我?

【问题讨论】:

  • 你能指定一个更好的精确输入和预期输出吗? (理想情况下可以复制粘贴到 Python 脚本中)
  • 您的每次尝试都发生了什么?你收到错误了吗?

标签: python arrays python-3.x multidimensional-array sparse-matrix


【解决方案1】:

您可以使用scipy.sparse.spdiags

num_data=len(df)
sp=sparse.spdiags(np.ones(num_data), 0, num_data,num_data)

输出

  (0, 0)    1.0
  (1, 1)    1.0
  (2, 2)    1.0
  (3, 3)    1.0

如果电影的ID不一致:

sparse.coo_matrix((np.ones(num_data),(df['ID'],df['ID'])))

如果ID 来自两个不同的数据框:

match=list(set(df['ID']).intersection(set(df2['ID'])))
sparse.coo_matrix((np.ones(num_data),(match,match)))

【讨论】:

    【解决方案2】:

    对角线下方为 1 且其他处为 0 的矩阵称为“单位矩阵”。您可以使用scipy.sparse.identity(n) 在python 中创建一个。文档是here

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2021-11-25
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2020-12-07
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多