I want to make a sparse numpy array using the indexes and values stored in a pandas DataSet

The dataset has 'userIndex', 'movieIndex' and 'rating' with a million rows

For example:

--movieIndexuserIndexrating
0042.5
1223.0
2114.0
3204.0
4423.0

Would be transformed to a numpy array like this:

[[0 0 0 0 2.5],
[0 4.0 0 0 0],
[4.0 0 3.0 0 0],
[0 0 0 0 0],
[0 0 3.0 0 0]]

So, first I'm making a np.zeros array with the correct size:

Y = np.zeros([nm,nu])

And for now, I'm passing the information as:

for i in range(len(ratings)):
  Y[int(ratings.iloc[i].movieIndex),int(ratings.iloc[i].userIndex)]
    = ratings.iloc[i].rating

And it works just fine with O(n), so it's not really bad but it takes 3 minutes to do so. I know it's not a good idea to use "for" in a dataset, and I should use the vector functions to do it, but I can't find a way to make this work. Any ideas?

推荐答案

Maybe it will work faster:

Y[ratings["movieIndex"].values, ratings["userIndex"].values] = ratings["rating"].values

Python相关问答推荐

使用不同格式转换转换列表列表的项目

如果只对最近点感兴趣,则优化欧几里得距离矩阵算法

在Pandas 中为嵌套字典创建列名

使用 excel 值在 python 中执行计算

将列表设置为 Pandas DataFrame 的索引

$sum 内的聚合 $match

如何在 python 脚本中找到所有 *used* 的函数?

如何在列表中查找给定值的所有下限值和上限值

登录时未显示用户预订

如何定义多个错误处理语句?

在Pandas 的条件行 Select 中判断数据框的一部分的长度

numpy.einsum 是如何实现的?

为同一 matplotlib 图例中的每一行设置不同的“numpoints”参数

如何在视图中获取 Select 表单的值?

N 函数调用 Python/Selenium 后的睡眠decorator

在没有docker的情况下运行ok时拒绝使用docker连接本地ip地址

使用 Pymongo 获取保存在 MongoDB 中的对象数量

带有条件的嵌套循环中的 lambda

在多索引中查询日期时间

Python:提取最早和最新列的列名