将一维数组转换为稀疏矩阵
Convert 1-D array into sparse matrix
我正在做一个推荐项目,我有这样的数据:
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)
但是我想不通。谁能帮帮我?
您可以使用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)))
对角线上为 1 而其他位置为 0 的矩阵称为 "identity matrix"。您可以使用 scipy.sparse.identity(n)
在 python 中创建一个。文档是 here.
我正在做一个推荐项目,我有这样的数据:
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)
但是我想不通。谁能帮帮我?
您可以使用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)))
对角线上为 1 而其他位置为 0 的矩阵称为 "identity matrix"。您可以使用 scipy.sparse.identity(n)
在 python 中创建一个。文档是 here.