我正在做硕士学位论文,并且是关于推荐系统的。 在第一步中,我需要对数据集进行kmeans。 我使用epinions数据集, 我的问题是每个用户都有很多行,并且 我需要将一个用户的所有行合并到一列中。
示例:
A = [
[1 2 3]
[1 3 4]
[1 5 1]
]
列为userid
,item num
,rate
B =
[1 2 3 3 4 5 1]
我需要将A转换为B. 我不确切地知道它是否是重塑数据的好方法,但我需要为一个用户提供一行而不是每个用户评级一行
谢谢朋友们。
答案 0 :(得分:0)
要查找A
中用户ID为1
的所有行,您可以使用
A(:,1)==userId
返回列向量,如果用户ID为1,则返回逻辑true,否则返回逻辑false。 您可以使用此结果和matrix indexing使用
查找与此用户ID对应的所有值tmp = A(A(:,1)==userId, 2:end);
在您的情况下,结果将是包含所需值的3 x 2
矩阵。您可以使用reshape
功能将其展平。
当reshape
按列读取数据然后重新整形时,这将改变数组的顺序。通过首先转置输入,数据按行进行。最后,您只需将userId
附加在此向量的前面。
userPrefs = [userId, reshape(tmp.',1,[])]
结果:
A = [1 2 3; 1 3 4; 1 5 1];
userId = 1;
tmp = A(A(:,1)==userId, 2:end);
userPrefs = [userId, reshape(tmp.',1,[])];
userPrefs =
1 2 3 3 4 5 1