用于 N 维数组的 R/C/C++ 库

计算科学 矩阵 图书馆 数据分析 r
2021-11-27 05:05:30

我正在寻找一个在 R 中或可以用 R 轻松包装的库,它可以执行以下操作:

  • 构造和子集 N 维数组
  • 沿任何维度执行诸如min, max, sum,之类的操作sd
  • 速度快,理想情况下有一个 BLAS 后端

并且(这很重要),能够沿总结上述操作的任何维度(及其组合)定义多级掩码。例如,

1 3 5
2 4 6   -(rowmask=[1,3])-(colmask=1,2)-(op=sum)-(axis=rows)->  8 11
7 8 9

要么:

1 3 5                                                      3 7 11
2 4 6   -(rowlevels=['a','a','b'])-(op=sum)-(axis=rows)->  7 8 9
7 8 9

理想情况下也是两者的结合。

我已经开始在核心 R 中对此进行编码,但它很快就会变得一团糟。

有什么建议?

3个回答

DyND库可能会让您感兴趣它来自 Scientific Python 生态系统,作为 numpy 的替代品,但我相信它是直接的 C++,因此应该很容易在 R 中包装。

实际上,在两种语言之间共享一个数字库可能会带来意想不到的好处。

到目前为止,R 的最佳解决方案是 DataTable

http://cran.r-project.org/web/packages/data.table/index.html

我不确定 BLAS 后端,但 DataTable 速度非常快。我有一份使用 data.frame 聚合的工作大约需要 24 小时。我只是用数据表替换了所有内容,大约 20 分钟就完成了。这是 2 年前,该软件包还处于起步阶段。

见时间: http ://cran.r-project.org/web/packages/data.table/vignettes/datatable-timings.pdf

基础 R 中的数组函数提供了以下功能:

x <- array(c(1, 2, 7, 3, 4, 8, 5, 6, 9), dim = c(3, 3, 1))
max(x[1,,])
min(x[,1,])
sd(x[,,1])

slam 包为稀疏数组提供了一种格式:

s <- as.simple_sparse_array(x)
max(s[1,,])
min(s[,1,])
sd(as.vector(s[,,1]))

我从来没有用过slam,所以我不熟悉来龙去脉。如果您的数组非常密集,只需使用 R 数组。

在数组索引和应用函数之间,您应该能够做大部分您想做的事情。