现有一矩阵a样子如下,第一列是歌曲id,第二列是推荐的歌曲id,第三列是置信度
想要生成一个矩阵b,每首歌要推荐5首歌曲,置信度已经排序,所以是每首歌从上往下取出5首推荐个曲,不足5首的用0补齐,最后的样子如下
1 | 1 | 0.1 |
1 | 2 | 0.2 |
1 | 3 | 0.3 |
1 | 4 | 0.4 |
1 | 5 | 0.5 |
1 | 6 | 0.6 |
1 | 7 | 0.7 |
1 | 8 | 0.8 |
1 | 9 | 0.9 |
2 | 10 | 1 |
2 | 11 | 1.1 |
2 | 12 | 1.2 |
2 | 13 | 1.3 |
2 | 14 | 1.4 |
2 | 15 | 1.5 |
2 | 16 | 1.6 |
2 | 17 | 1.7 |
3 | 18 | 1.8 |
3 | 19 | 1.9 |
3 | 20 | 2 |
3 | 21 | 2.1 |
4 | 22 | 2.2 |
4 | 23 | 2.3 |
5 | 24 | 2.4 |
5 | 25 | 2.5 |
5 | 26 | 2.6 |
5 | 27 | 2.7 |
5 | 28 | 2.8 |
5 | 29 | 2.9 |
5 | 30 | 3 |
1 | 1 | 0.1 |
1 | 2 | 0.2 |
1 | 3 | 0.3 |
1 | 4 | 0.4 |
1 | 5 | 0.5 |
2 | 10 | 1 |
2 | 11 | 1.1 |
2 | 12 | 1.2 |
2 | 13 | 1.3 |
2 | 14 | 1.4 |
3 | 18 | 1.8 |
3 | 19 | 1.9 |
3 | 20 | 2 |
3 | 21 | 2.1 |
3 | 0 | 0 |
4 | 22 | 2.2 |
4 | 23 | 2.3 |
4 | 0 | 0 |
4 | 0 | 0 |
4 | 0 | 0 |
5 | 24 | 2.4 |
5 | 25 | 2.5 |
5 | 26 | 2.6 |
5 | 27 | 2.7 |
5 | 28 | 2 |
以下是实现的代码
b=unique(a(:,1))*ones(1,5);
b=reshape(b',numel(unique(a(:,1)))*5,1);
for i=1:length(unique(a))
x=find(b(:,1)==i);
y=find(a(:,1)==i);
if length(x)<length(y)
for j=1:length(x)
if b(x(j),1)==a(y(j),1)
b(x(j),2:3)=a(y(j),2:3);
end
end
else
for j=1:length(y)
if b(x(j),1)==a(y(j),1)
b(x(j),2:3)=a(y(j),2:3);
end
end
end
end