我需要在Matlab中重塑epinions数据集

时间:2016-01-09 09:12:36

标签: matlab reshape

我正在做硕士学位论文,并且是关于推荐系统的。 在第一步中,我需要对数据集进行kmeans。 我使用epinions数据集, 我的问题是每个用户都有很多行,并且 我需要将一个用户的所有行合并到一列中。

示例:

A = [
    [1  2  3]
    [1  3  4]
    [1  5  1]
]

列为useriditem numrate

B =
  [1 2 3 3 4 5 1]

我需要将A转换为B. 我不确切地知道它是否是重塑数据的好方法,但我需要为一个用户提供一行而不是每个用户评级一行

谢谢朋友们。

1 个答案:

答案 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