PageRankの計算
Posted feedbacks - JavaScript
ライブラリを使えということなので、dojo(0.4.3)を。やってることは#2335とほぼ同じです。
see: dojo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | (function(data){ with(dojo.math.matrix){
var size = 0, i, j, l;
for(i in data) size++;
var m = zeros(size, size), pr = create(1, size, 1 / size);
for(i in data) for(j = l = data[i].length; j--;)
m[data[i][j] - 1][i - 1] = 1 / l;
for(var diff = 1, nx; diff > ALMOST_ZERO; pr = nx){
nx = multiply(m, pr);
for(diff = 0, j = size; j--;) diff += Math.abs(nx[j][0] - pr[j][0]);
}
(typeof WSH != 'undefined' ? function($){WSH.echo($)} : confirm)(format(pr));
}})({
1: [2, 3, 4, 5, 7],
2: [1],
3: [1, 2],
4: [2, 3, 5],
5: [1, 3, 4, 6],
6: [1, 5],
7: [5]
});
|

ところてん
#3404()
Rating0/0=0.00
詳しい導出方法はGoogle の秘密 - PageRank 徹底解説の3章に載っていますが、 簡単に説明すると
という流れになります。
Pythonで表現すると下のようになります。 ?????の部分は空行を入れて10行でしたので 何百行ものコードになってしまった場合は きっとお題の趣旨から外れていると思います。 このお題の趣旨は「行列計算ライブラリを使って」PageRankを計算することなので、 自力で固有値の計算を実装することは求められていません。
data = { 1: [2, 3, 4, 5, 7], 2: [1], 3: [1, 2], 4: [2, 3, 5], 5: [1, 3, 4, 6], 6: [1, 5], 7: [5], } ????? print pagerank # [0.303514376997, 0.166134185304, 0.140575079872, # 0.105431309904, 0.178913738019, 0.0447284345048, # 0.0607028753994]このお題はところてんさんの「行列演算系のお題が欲しい」という要望を元に考えたものです。ありがとうございました。[ reply ]