3

私は非常にスパースなPerl行列(配列の配列)を持っています。ここで、undef値はゼロと同等です。10〜1000行、最大100k列です。次のようになります。

$ARRAY1 = [
            [
              ( undef ) x 1069,
              1,
              ( undef ) x 47,
              1,
              ( undef ) x 11,
              2,
              ( undef ) x 50,
              1,
              ( undef ) x 23,
              1,
              ( undef ) x 6033,
              ...
            ],
            [
              ...
            ],
            ...
          ]

...私が言ったように-非常にまばらです。

このマトリックスをRスクリプトで使用したいと思います(前の投稿を参照)。1つの方法は、テーブルをPerlからファイルに印刷することです(行ごとに1行)、に遭遇した0ときはいつでも印刷しundefます。

しかし、おそらく、このスパース行列を渡すためのより良い、よりコンパクトな方法がありますか?

4

2 に答える 2

3

それは適度に難しい問題です。

私は、Perlのスローガンを言い換えることができるようにすることから始めようと思います。

  1. slam、SparseMなどのR用の2つまたは3つのスパース行列パッケージについて学習します。
  2. 好みのものを選び、おそらく位置で(x,y,value)エンコードするなどのトリプレットからスパース行列を効率的に構築する方法を学びます。value(x,y)
  3. その形式のスパース行列を一時ファイルに出力するPerlコードを記述します。
  4. Rでその一時ファイルを読み取り、スパース行列を作成します。

より派手で高速な言語間シリアル化は後で行うことができます。それは些細な問題ではありません。

于 2010-11-04T19:09:25.833 に答える
0

これらのゼロをファイルに出力する場合、perlの場合は不要な印刷が多く、Rの場合は読み取りと解析が必要になります。このようなスパース行列をシリアル化する一般的な方法は、ディメンション(必要な場合)とゼロ以外の要素のみを提供することです。 'インデックスと値。したがって、中間のシリアル化されたデータは次のようになります。

80000 200
1069 0 1
1117 0 1
1129 0 2
...
于 2010-11-04T19:10:31.507 に答える