• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlでページランクを取得する方法)

Perlでページランクを取得する方法

このQ&Aのポイント
  • Perlを使用してページランクを取得する方法について教えてください。
  • PDLモジュールを使用してリンク隣接行列を定義し、列ベクトルとの行列積を繰り返すことでページランクを計算します。
  • while文を使用して行列積の計算を繰り返し、答えが変わらなくなったところでループを抜ける処理を書く方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

use PDL::Ufunc; を追加し、次でループ脱出 if(all $ans_now == $ans_before){last;} ただし、$ans_nowは今回の演算結果, $ans_beforeは前回の演算結果 PDLのhelp allより: ======================= Module PDL::Ufunc all Return true if all elements in piddle set   ...(snip) =======================

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

なんかもったいないことをしてる気がする>#3. approx とか all とか駆使すればいいような.

回答No.3

表示がくずれるので、空白2文字を全角空白にしていることに注意。 use feature 'say'; use PDL; my $matrix1 = pdl( [ [ 1, 2 ], [ 3, 4 ] ] ); print '--- matrix1', $matrix1; # --- matrix1 # [ # [1 2] # [3 4] # ] my $vector1 = pdl( [ [5], [6] ] ); print '--- vector1', $vector1; # --- vector1 # [ # [5] # [6] # ] my $answer = $matrix1 x $vector1; print '--- answer', $answer; # --- answer # [ # [17] # [39] # ] my $vector2 = pdl( [ [7], [8] ] ); print '--- vector2', $vector2; if ( compare_vector($vector1,$vector2) ) {   say '$vector1 == $vector2'; } else {   say '$vector1 != $vector2'; } # --- vector2 # [ # [7] # [8] # ] # $vector1 != $vector2 my $vector3 = pdl( [ [5], [6] ] ); print '--- vector3', $vector3; if ( compare_vector($vector1, $vector3) ) {   say '$vector1 == $vector3'; } else {   say '$vector1 != $vector3'; } # --- vector3 # [ # [5] # [6] # ] # $vector1 == $vector3 sub compare_vector {   my $v1 = shift;   my $v2 = shift;   if ($v1->getndims != $v2->getndims) {     return 0;   }   my $dims = $v1->getndims;   for (my $i = 0; $i < $dims; $i++) {     if ($v1->at(0, $i) != $v2->at(0, $i)) {       return 0;     }   }   return 1; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

えぇと.... あなたは 2つの列ベクトルが同じかどうか判断することができますか?

syukoukyoku
質問者

補足

mat1×mat2を実行し、その答え(当然7行1列)にさらにmat1をかけ、その掛けた答えにさらにmat1を掛けるという動作を繰り返していくと、いずれその答えがほとんど変わらなくなります。その部分で、whileなりfor文から抜け出してその変わらなくなった答え(当然7行1列)を出力したいのです。 そのプログラムを教えて頂けたら幸いです。

回答No.1

課題なのか何なのかよくわかりませんが、 ここで聞いてバレたら面倒なことになるとは想像できないんですか?

syukoukyoku
質問者

補足

課題ではありません。 mat1×mat2を実行し、その答え(当然7行1列)にさらにmat1をかけ、その掛けた答えにさらにmat1を掛けるという動作を繰り返していくと、いずれその答えがほとんど変わらなくなります。その部分で、whileなりfor文から抜け出してその変わらなくなった答え(当然7行1列)を出力したいのです。 そのプログラムを教えて頂ければ幸いです。 PDLをダウンロードしました。

関連するQ&A