2012-03-04 10 views
0

Webページのリクエストごとに、行列にベクトルを掛けなければなりません。行列は対称で(おそらく)疎で、約500x500の寸法です。このベクトルは、約500×100000の寸法を有する別のマトリックスから取り出された列である。今私の質問は、私は行列を格納し、効果的な方法で計算を実行する方法です。私はPHPで計算を行い、mysqlまたはハードドライブ上に行列を格納したいと思いますが、この種のタスクにはより良いツールがあると思います。行列の格納と計算の実行

さらに知りたい場合は、お気軽にお問い合わせください。

+0

マトリックスのスパースはどのくらいですか?これは、MySQLストレージを評価する上で重要です。 –

+0

エントリの約11%が0以外の値を持ちます。 –

答えて

0

OK、私たちはここで本当のコーナーケースを得た:

  • 500x100,000 =5000万要素を。データタイプに応じて、この はcaに変換されます。を無視した場合のインメモリ表現の50M-400Mの索引によるアドレスとアドレス。対称である行列はこれを25-200Mに減らします
  • 11%の非ゼロ密度は、 のデータ型のオーバーヘッドが均等であることを意味します。 64ビットデータ型のオプション。ここからの作業

は、2層ソリューションに強力な引数を与える:

  • A(共有)、 "データストアサーバー"(MySQLはあなたが 言及した一つの選択肢である)
  • と(おそらくPHP)フロントエンド。

PHPを500x500の行列乗算に使用すると、非常に効率的な方法ではないようです:PHPではループオーバーヘッドが非常に高いので、ループの内部で少ししか処理しないと、パフォーマンス。

私はわずかに異なる解決策のために行くことをお勧めします。(ローカル)ソケット上

  • リッスンは、起動時に

    • がメモリに行列を読み込むこと、(多分、CまたはC#で)独自のバックエンドを書きますコマンド、例えば
    • 「乗算」をマトリックスと、与えられたデータにこれらのコマンドを実行し、結果

    を返し、PHPを介してそれを送ります。このようにして、フロントエンド用のPHPのシンプルさとWeb中心性を備えながら、コア関数用にコンパイルされた言語の処理速度を得ることができます。

  • +0

    これはまさに私が探していた答えです。私はオプション2に行きます。 –