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 脚本中使用这个矩阵(参见一篇文章)。一种方法是从 Perl 将表格打印到文件中 - 每行一行,并0在遇到undef.

但也许有更好、更紧凑的方法来传递这个稀疏矩阵?

4

2 回答 2

3

这是一个中等难度的问题。

我想我会先让简单的事情成为可能来改写 Perl 口号:

  1. 了解 R 的两个或三个稀疏矩阵包,如 slam、SparseM、...。
  2. 选择一个你喜欢的并学习如何有效地构建一个稀疏矩阵,大概来自三元组,例如在 position 处(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 回答