首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于用户、项对的稀疏矩阵实现

用于用户、项对的稀疏矩阵实现
EN

Stack Overflow用户
提问于 2016-10-14 12:09:10
回答 1查看 2.3K关注 0票数 3

我有一个数以百万计的记录数据集,其中包括100,000名用户,他们购买了20,000个项目的子集,形式如下:

代码语言:javascript
复制
<user1, item1>
<user1, item12>
...
<user100,000, item>

我需要跟踪一个大小矩阵(条目x用户)= (20,000 x 100,000),如果用户购买了该项目,则为1,否则为零。目前,我使用的是传统的numpy数组,但是在后面的步骤中处理这个数组的时间太长了。有人能推荐一种有效的方法来使用SciPy的稀疏矩阵之一,它仍然允许搜索基于索引的矩阵吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-14 12:30:41

这里有一个解决方案,用0和1s构造一个密集的枢轴表,然后创建等效的稀疏矩阵。我选择了lil_matrix,但还有其他选择。

代码语言:javascript
复制
import numpy as np
from scipy import sparse

ar = np.array([['user1', 'product1'], ['user2', 'product2'], ['user3', 'product3'], ['user3', 'product1']])

rows, r_pos = np.unique(ar[:,0], return_inverse=True)
cols, c_pos = np.unique(ar[:,1], return_inverse=True)

pivot_table = np.zeros((len(rows), len(cols)))
pivot_table[r_pos, c_pos] = 1

print(pivot_table)

# Convert the dense pivot table to a sparse matrix
s = sparse.lil_matrix(pivot_table)

# I can access the non-nul indices using nonzero
print(s.nonzero())

这意味着:

代码语言:javascript
复制
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 1.  0.  1.]]
(array([0, 1, 2, 2], dtype=int32), array([0, 1, 0, 2], dtype=int32))

附录

如果它是相关的,下面是另一种解决方案,不使用but,而是使用pandas

代码语言:javascript
复制
In [34]: import pandas as pd

In [35]: df = pd.DataFrame([['user1', 'product1'], ['user2', 'product2'], ['user3', 'product3'], ['user3', 'product1']], columns = ['user', 'product'])

In [36]: df
Out[36]: 
    user   product
0  user1  product1
1  user2  product2
2  user3  product3
3  user3  product1

In [37]: df.groupby(['user', 'product']).size().unstack(fill_value=0)
Out[37]: 
product  product1  product2  product3
user                                 
user1           1         0         0
user2           0         1         0
user3           1         0         1

此外,请不要这样计算每个客户购买的产品数量(这可能是有趣的,取决于您的用例和数据集)。

您仍然可以使用此库搜索数据。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40042829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档