dankogai #3828(2007/11/11 00:30 GMT) [ Perl ] Rating2/2=1.00
PDLで楽勝と思いきや、PDL::eigens()がasymmetric matricesをサポートしていないというショボーンな結果に。他にもいろいろ探して、自前eigen()を実装しようかと思いきや。Inline::Octaveなんちゅう超ど真ん中ストライクなものが! おかげで超楽勝。なにせPageRank計算部分はGoogle の秘密 - PageRank 徹底解説モロままだけど、Inline::Octave見つけるまでに遠回りし過ぎ。
PDL::eigens()
eigen()
Inline::Octave
Dan the Inline::Hacker
see: Inline::Octave
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#!/usr/local/bin/perl use strict; use warnings; use Inline Octave => 'DATA'; sub links2matrix{ my $table = shift; my $dim = @$table; my $mat = []; $mat->[$_] = [(0) x $dim] for (0..$dim-1); for my $i (0..@$table-1){ my $nlinks = scalar @{$table->[$i]}; $mat->[$_-1][$i] = 1/$nlinks for (@{$table->[$i]}); } $mat; } my $m = Inline::Octave->new( links2matrix( [ [ 2, 3, 4, 5, 7 ], [ 1], [ 1, 2 ], [ 2, 3, 5 ], [ 1, 3, 4, 6 ], [ 1, 5 ], [5], ] ) ); local $\ = "\n"; print "Matrix:"; print $m->disp(); print "Pagerank:"; print pagerank($m)->disp(); __DATA__ __Octave__ function p=pagerank(m); [v,d] = eig(m); ev = v(:, find(abs(diag(d)) == max(abs(diag(d))))); p = ev ./ norm(ev, 1); endfunction
Rating2/2=1.00-0+
[ reply ]
dankogai
#3828()
[
Perl
]
Rating2/2=1.00
PDLで楽勝と思いきや、
PDL::eigens()がasymmetric matricesをサポートしていないというショボーンな結果に。他にもいろいろ探して、自前eigen()を実装しようかと思いきや。Inline::Octaveなんちゅう超ど真ん中ストライクなものが! おかげで超楽勝。なにせPageRank計算部分はGoogle の秘密 - PageRank 徹底解説モロままだけど、Inline::Octave見つけるまでに遠回りし過ぎ。Dan the Inline::Hacker
see: Inline::Octave
Rating2/2=1.00-0+
[ reply ]