问题标签 [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.
armadillo - 犰狳中的矩阵不对称警告过于严格
犰狳的最后一个版本在使用 inv_sympd 时给出了矩阵不对称的警告。然而,矩阵是一个叉积,所以我确信它是对称的。当我打印 A-arma::trans(A) 时,我得到除了 1.1369e-013 之外的所有元素都是 0。
该警告有时会导致 Rstudio 崩溃,因为我正在使用并行计算,因此不同的内核可以尝试同时打印并使其崩溃。如何禁用警告或使其不那么严格?
r - 在 MacOS 上将 RcppArmadillo 与 openmp 一起使用
我写了一个使用 RcppArmadillo 的小包。它在 Linux 和 Windows 上编译良好,但在 MacOS 上失败。错误是:
我的 Makevars 如下(即由 RcppArmadillo 自动生成)
我已经用谷歌搜索了,但找不到解决方案。
r - 在 Microsoft Open R 中加载 Rcpp/RcppArmadillo 包时出错
我在我的 Windows 10 笔记本电脑中安装了 Microsoft Open R 以获得更好的性能。我正在尝试使用 RcppArmadillo 包。该软件包已正确安装,但是当我尝试加载它时会引发以下错误。
错误:rbind(info, getNamespaceInfo(env, "S3methods")) 中的“RcppArmadillo”的包或命名空间加载失败:矩阵的列数必须匹配(参见参数 2)
请帮助解决问题。
在 Windows 10 中是否有任何替代方法可以直接将英特尔 MKL 库与 RcppArmadillo 链接?
r - 非连续矩阵的高级构造函数
在我的实现中,我经常使用子矩阵和矩阵块。我想知道犰狳中是否有一种方法可以让我提取一个更大的矩阵块,并为这个子矩阵使用与原始矩阵中的块相同的内存。我的问题是我不知道该怎么做,因为原始矩阵中的位置不连续。
这是一个简单的示例,说明了当我的原始矩阵为 时我想要做什么A = [A1 A2]
:
在这种情况下,子矩阵的位置是连续的,我可以使用高级构造函数来链接内存。
现在假设我希望子矩阵是A[1:2, 1:2]
. 我可以B
在犰狳中获得与原始元素使用相同内存的副本A
吗?(理想情况下,这个问题的解决方案也可以推广到列也不连续的情况,例如A[c(1, 3), c(1, 3)]
。)
编辑:为了澄清,我真的需要B
上面函数中的矩阵独立存在。我不在fill
我的真实代码中使用它,而是在各种矩阵乘法等中使用它(和多个其他子矩阵)。所以我追求的是一种创建B
非连续子矩阵的方法,A
同时确保它们使用相同的记忆。
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 语法的使用。
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
使用covArmadilloMclsmNormal
Rcpp 功能:
现在这是meancorlsm
我用于测试的 R 版本:
您可以将函数替换为meancorlsm
函数meancorlsR
中的compute_indices
函数,它将起作用(用于测试)。但是,为了立即重现性,我在此处将其提供为compute_indicesR
.
最后,这是一个运行的最小示例:
无论我指定的内核数量如何,我都希望所有输出都与 R 版本产生的输出相匹配。但是,它们是不同的。这是我使用 R 版本得到的结果:
我使用 2 个内核的 Rcpp 版本得到的结果是
而对于使用 4 个内核的 Rccp 版本:
使用单核的 Rccp 版本产生了与 R 版本相同的答案,这是正确的结果。同样有趣的是,ap
无论我在sh
和mg
列发生变化时使用的核心数量如何,答案的列都保持不变。
最后,我的平台是 Ubuntu 16.04。似乎FORK
集群在 Windows 上不起作用,因此您可能无法重现此结果。但是,即使使用PSOCK
集群,我也得到了相同的行为(在这种情况下,我曾经clusterEvalQ()
获取必要的 Cpp 函数以使它们可供工作人员使用)。非常感谢任何关于我做错了什么的帮助或见解。
rcpp - 在 R 中使用 RcppArmadillo 包和 rowvec 时出现编译错误
我正在尝试编译以下代码。请看下面我到目前为止所做的尝试。有什么我想念的吗。任何帮助,将不胜感激。
我无法复制错误,但这就是我得到的。
等等...
c++ - 如何处理可能具有多种类型之一的 Rcpp::XPtr
我的情况是,我有Rcpp::XPtr
一个犰狳对象(例如arma::Mat
,它可能是一种受支持的数据类型的矩阵)。现在我想编写一个查询元素数量的函数。到目前为止,我能想到的最好的方法如下(受bigstatsr启发):
有没有更好的方法来做到这一点?我将这种模式用于相当多的功能,并且冗长正在成为一个问题。理想情况下,我会有一个单一但简洁的功能,比如(当然不起作用)
而不是两个函数 + 每个实例的宏,我将XPtr
类似的从 R 传递到 C。
额外的问题:基于宏观的方法有什么明显的错误吗?这是否效率低下或可能导致问题?
要创建可重现的示例,请添加
并Rcpp::sourceCpp()
在 R 中的文件上运行。
r - 如何修复“无法将对象转换为函数:[type=NULL;target=CLOSXP、SPECIALSXP 或 BUILTINSXP]?”
我正在尝试将两个 R 函数集成到 rcpp。我的代码在 rcpp 中,我需要从“genlasso”包中包含两个 R 函数。
特别是,我的代码如下:
我尝试了不同的变体来克服这个问题,但没有用,我总是收到以下错误“无法将对象转换为函数:[type=NULL; target=CLOSXP, SPECIALSXP, or BUILTINSXP]”。PS R中“coef”函数的输出类型是“list”。
先感谢您。