问题标签 [rcpparmadillo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
774 浏览

armadillo - 犰狳中的矩阵不对称警告过于严格

犰狳的最后一个版本在使用 inv_sympd 时给出了矩阵不对称的警告。然而,矩阵是一个叉积,所以我确信它是对称的。当我打印 A-arma::trans(A) 时,我得到除了 1.1369e-013 之外的所有元素都是 0。

该警告有时会导致 Rstudio 崩溃,因为我正在使用并行计算,因此不同的内核可以尝试同时打印并使其崩溃。如何禁用警告或使其不那么严格?

0 投票
0 回答
263 浏览

r - 在 MacOS 上将 RcppArmadillo 与 openmp 一起使用

我写了一个使用 RcppArmadillo 的小包。它在 Linux 和 Windows 上编译良好,但在 MacOS 上失败。错误是:

我的 Makevars 如下(即由 RcppArmadillo 自动生成)

我已经用谷歌搜索了,但找不到解决方案。

0 投票
0 回答
350 浏览

r - 在 Microsoft Open R 中加载 Rcpp/RcppArmadillo 包时出错

我在我的 Windows 10 笔记本电脑中安装了 Microsoft Open R 以获得更好的性能。我正在尝试使用 RcppArmadillo 包。该软件包已正确安装,但是当我尝试加载它时会引发以下错误。

错误:rbind(info, getNamespaceInfo(env, "S3methods")) 中的“RcppArmadillo”的包或命名空间加载失败:矩阵的列数必须匹配(参见参数 2)

请帮助解决问题。

在 Windows 10 中是否有任何替代方法可以直接将英特尔 MKL 库与 RcppArmadillo 链接?

0 投票
1 回答
123 浏览

r - 非连续矩阵的高级构造函数

在我的实现中,我经常使用子矩阵和矩阵块。我想知道犰狳中是否有一种方法可以让我提取一个更大的矩阵块,并为这个子矩阵使用与原始矩阵中的块相同的内存。我的问题是我不知道该怎么做,因为原始矩阵中的位置不连续。

这是一个简单的示例,说明了当我的原始矩阵为 时我想要做什么A = [A1 A2]

在这种情况下,子矩阵的位置是连续的,我可以使用高级构造函数来链接内存。

现在假设我希望子矩阵是A[1:2, 1:2]. 我可以B在犰狳中获得与原始元素使用相同内存的副本A吗?(理想情况下,这个问题的解决方案也可以推广到列也不连续的情况,例如A[c(1, 3), c(1, 3)]。)

编辑:为了澄清,我真的需要B上面函数中的矩阵独立存在。我不在fill我的真实代码中使用它,而是在各种矩阵乘法等中使用它(和多个其他子矩阵)。所以我追求的是一种创建B非连续子矩阵的方法,A同时确保它们使用相同的记忆。

0 投票
2 回答
1278 浏览

rcpp - R 包构建错误:'-std=c++11 或 -std=gnu++11 编译器选项'

我正在尝试构建一个包含 Rcpp 和 RcppArmadillo 代码的 R 包。sourceCpp() 工作正常,一切运行顺利,但是当我尝试构建包时,我得到:“此文件需要 ISO C++ 2011 标准的编译器和库支持。此支持目前是实验性的,必须使用 -std 启用=c++11 或 -std=gnu++11 编译器选项。”

在描述文件中包含 RcppArmadillo 和 Rcpp11 似乎没有帮助(见下文)

我的描述文件包括:

我没有包含这两个 .cpp 文件,因为它们相当长,但显然问题似乎是 C++11 语法的使用。

0 投票
1 回答
452 浏览

r - Parallel 和 Rcpp Armadillo 的问题:集群工作人员之间可能存在变量损坏

我在将 Rcpp(和 Rcpp Armadillo)与并行包一起使用时遇到了一些问题,并且我得到的结果不正确,具体取决于我用于计算的内核数量。

我有一个函数compute_indices可以为我的数据中的每个观察结果计算 3 组索引。它首先parallel::makeCluster根据我指定的核心数量创建一个(FORK)集群。然后它将我的数据分成相等的部分,并使用我之前创建的集群对象在每个部分上应用(使用parallel::parLapply)一个函数。meancorlsm现在meancorlsm基本上是covArmadilloMclsmNormal我在 Rcpp 和 Rcpp Armadillo 中编写的函数(称为 )的包装器,因为我试图加快计算速度。但是,我有另一个完全用 R 编写的函数版本(称为meancorlsR),我用它来测试 RccpArmadillo 版本的正确性。

现在,如果我compute_indices使用meancorlsm(我首先使用sourceCpp()covArmadilloMclsmNormal在全局环境中提供)运行,我会得到部分正确的答案,具体取决于我告诉compute_indices使用的核心数量。具体来说,如果我使用 4 个核心,计算索引的前 1/4 是正确的,如果我使用 2 个核心,我的结果的前 1/2 是正确的,如果我使用单个核心,我的所有结果都是正确的. 我使用 R 版本的meancorlsm(meancorlsR如前所述)。由于我在使用单核时得到了正确的结果,所以我觉得 RcppArmadillo 函数是正确的,并且集群的不同线程/工作者可能在计算过程中相互干扰,因此我得到这种奇怪行为的原因。

下面是compute_indices

meancorlsm

使用covArmadilloMclsmNormalRcpp 功能:

现在这是meancorlsm我用于测试的 R 版本:

您可以将函数替换为meancorlsm函数meancorlsR中的compute_indices函数,它将起作用(用于测试)。但是,为了立即重现性,我在此处将其提供为compute_indicesR.

最后,这是一个运行的最小示例:

无论我指定的内核数量如何,我都希望所有输出都与 R 版本产生的输出相匹配。但是,它们是不同的。这是我使用 R 版本得到的结果:

我使用 2 个内核的 Rcpp 版本得到的结果是

而对于使用 4 个内核的 Rccp 版本:

使用单核的 Rccp 版本产生了与 R 版本相同的答案,这是正确的结果。同样有趣的是,ap无论我在shmg列发生变化时使用的核心数量如何,答案的列都保持不变。

最后,我的平台是 Ubuntu 16.04。似乎FORK集群在 Windows 上不起作用,因此您可能无法重现此结果。但是,即使使用PSOCK集群,我也得到了相同的行为(在这种情况下,我曾经clusterEvalQ()获取必要的 Cpp 函数以使它们可供工作人员使用)。非常感谢任何关于我做错了什么的帮助或见解。

0 投票
1 回答
128 浏览

c++ - 如何在 Rcpp 中建立一个常数矩阵?

我是 Rcpp 用户,在我的 cpp 文件中,我需要重复使用一个矩阵。我想定义一个常数矩阵,但我不知道该怎么做。

我曾经在 Rcpp 中定义了一个常量双精度类型变量,它对我来说效果很好。但是当我对矩阵重复同样的方法时,

它有以下错误

在此处输入图像描述

0 投票
1 回答
48 浏览

rcpp - 在 R 中使用 RcppArmadillo 包和 rowvec 时出现编译错误

我正在尝试编译以下代码。请看下面我到目前为止所做的尝试。有什么我想念的吗。任何帮助,将不胜感激。

我无法复制错误,但这就是我得到的。

等等...

0 投票
1 回答
126 浏览

c++ - 如何处理可能具有多种类型之一的 Rcpp::XPtr

我的情况是,我有Rcpp::XPtr一个犰狳对象(例如arma::Mat,它可能是一种受支持的数据类型的矩阵)。现在我想编写一个查询元素数量的函数。到目前为止,我能想到的最好的方法如下(受bigstatsr启发):

有没有更好的方法来做到这一点?我将这种模式用于相当多的功能,并且冗长正在成为一个问题。理想情况下,我会有一个单一但简洁的功能,比如(当然不起作用)

而不是两个函数 + 每个实例的宏,我将XPtr类似的从 R 传递到 C。

额外的问题:基于宏观的方法有什么明显的错误吗?这是否效率低下或可能导致问题?

要创建可重现的示例,请添加

Rcpp::sourceCpp()在 R 中的文件上运行。

0 投票
0 回答
816 浏览

r - 如何修复“无法将对象转换为函数:[type=NULL;target=CLOSXP、SPECIALSXP 或 BUILTINSXP]?”

我正在尝试将两个 R 函数集成到 rcpp。我的代码在 rcpp 中,我需要从“genlasso”包中包含两个 R 函数。

特别是,我的代码如下:

我尝试了不同的变体来克服这个问题,但没有用,我总是收到以下错误“无法将对象转换为函数:[type=NULL; target=CLOSXP, SPECIALSXP, or BUILTINSXP]”。PS R中“coef”函数的输出类型是“list”。

先感谢您。