问题标签 [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 投票
1 回答
1738 浏览

c++ - 使用 RcppArmadillo 在矩阵的列上应用函数有效,但在应用于行时返回错误

我编写了一个函数qSelectMbycol,它在 O(n) 时间内Rcpp返回k每列的第 th 个最大元素。此功能工作正常。如果我尝试做同样的事情但处理行而不是列(函数qSelectMbyrow),它会返回错误"error: Mat::init(): requested size is not compatible with column vector layout"。有人想我做错了什么吗?我将此文件保存为“ qselect.cpp”:

例子:

我也尝试插入

并将线设置向量替换y

在我的qSelectMbyrow函数中,虽然该函数随后运行,但与应用列相比它运行缓慢,并且如果我运行它 100 次也会使我的 R 会话崩溃。

0 投票
1 回答
438 浏览

c++ - 犰狳 - 长向量中每个小块的范数

我在 C++ 中使用犰狳。

我有一个包含 10 个元素的长向量。我想取每块 2 个相邻值的范数 2。最后,我将有 5 个值。

在 RI 中可以将该向量转换为矩阵并使用 apply 但我不确定如何在 Armadillo 中执行此操作。感谢任何帮助

0 投票
1 回答
797 浏览

r - 编译 RcppArmadillo 时遇到问题 - 未找到库 gfortran

跑步:

我收到以下错误:

所以它毕竟没有安装它。我在此链接上阅读了无法在 R 中编译 RcppArmadillo但我无法解决此问题,因为我不明白该怎么做。你能请评论吗?

我什至试图这样做

出现了同样的错误


感谢 JPR,我找到了帮助我解决问题的答案。所以如果你使用linux,使用他的命令行,如果你使用Mac,按照这个帖子安装运行时库

OS X 包安装依赖 gfortran-4.8

0 投票
2 回答
98 浏览

r - 命名空间中的并行工作者

此示例是此较早帖子的后续示例。我正在尝试将 Parallel Worker 移动到它自己的 cpp 文件并在头文件中声明它。

在公共工作者中调用“mypackage”函数

两个错误如下:1)变量类型'ExampleInternal::PARALLEL_WORKER'是一个抽象类

在我不可重现的示例中:2)错误:Parallel_worker.cpp 文件中的“ExampleInternal::PARALLEL_WORKER{”行上的预期不合格 ID。

现在代码如下所示:

ExampleInternal.h

Parallel_Worker.cpp

Parallel_func.cpp

0 投票
1 回答
416 浏览

r - 为什么 Rcpp 仅在从 R 包调用时才起作用,而不是在直接通过 sourceCpp 获取时才起作用?

当我使用 Rcpp 独立获取源时,我有一个在 R 中工作的 C++ 函数,但是当我将它包含在已编译的 R 包中时,我不断收到以下错误:error: arma::memory::acquire(): out of memory. 在这篇文章中,我提供了 C++ 代码,其中包含Znew_gen2我想在编译的 R 包中使用的函数。使用一个工作示例,我可以证明该Znew_gen2函数在我独立获取它时(在 R 包之外)是有效的。但是,当我从名为 的示例 R 包中调用相同的函数时HelpWithZnewgen2,该函数不再起作用,并且出现错误error: arma::memory::acquire(): out of memory。这篇文章中提到的所有代码都可以在 GitHub 存储库https://github.com/hheiling/myrepo_R中找到。

这里提供了我的工作示例:

当我运行工作示例并使用 sourceCPP 调用 Znew_gen2 函数时,如下所示,该函数运行没有错误。

但是,当我将这个相同的 Znew_gen2 函数放在 R 包中并从 R 包中调用此函数时,我收到错误:error: arma::memory::acquire(): out of memory. 出于说明目的,我创建了一个名为的 R 包HelpWithZnewgen2,并使用名为 的包装函数调用 Znew_gen2 Rcpp 函数Znew_gen2.Rfunction

收到的错误:

在另一个设置中,我尝试从 R 包中的另一个函数中调用 Znew_gen2 函数,并且在内存分配方面遇到了类似的错误。

因为代码本身在来自 R 包之外时有效,我怀疑我的问题与我的 R 包的设置方式有关。通过在线搜索,如果以下一个或多个组件存在问题,我不会感到惊讶:Znew_gen2.cpp“使用命名空间 Rcpp”行之前的行、我的描述文件或文件中可能缺少的某些Makevars行R包的。尽管我怀疑(这可能不正确,因为我对编写 R 包比较陌生),但我无法解决这个问题。因此,我将不胜感激有关如何解决此问题的任何建议。

Github repo https://github.com/hheiling/myrepo_RZnew_gen2提供了代码(文件Znew_gen2.cpphttps://github.com/hheiling/myrepo_R/blob/master/Znew_gen2.cpp)和包组件的更多详细信息。由于我不确定这些详细信息中的哪些(如果有)与回答问题相关,因此未在此处发布。HelpWithZnewgen2

上面的所有代码都在文件Stack Overflow Example.R https://github.com/hheiling/myrepo_R/blob/master/Stack%20Overflow%20Example.R中提供。

0 投票
1 回答
150 浏览

r - 有效计算 R 中两个 3D 数组的叉积之和

例如,对于 R 中的两个 3D 数组,

我可以循环执行以下叉积:

我的问题是我们能否更有效地(例如,通过矢量化或rcppN而不是使用循环来做非常大的事情?

0 投票
0 回答
96 浏览

c++ - 从另一个函数中调用 Rcpp 函数性能会降低

我正在重写一些旧代码以使用新类型的参数表示。旧版本使用矩阵来表示参数,而新版本使用 aList和 an arma::fcube。我得到的性能损失只有在从另一个函数中多次调用该函数时才能观察到:

旧函数ConditionalProbs比名为 的新函数慢了近 2 倍conditional_probabilities。另一方面, (多次multiple_times_old调用)比 快 4 倍左右,即使此函数之间的唯一区别是多次调用的函数。ConditionalProbsmultiple_times_new

我为长代码道歉:这是我的旧代码(请注意,我正在使用但我确实通过在新代码上NumericMatrix更改它来提高速度)IntegerMatrix

现在新版本是:

我编写了基准测试来测试这些功能:

为什么multiple_times_newmultiple_times_old第一个调用的函数比第二个调用的函数快?

0 投票
0 回答
360 浏览

c++ - 在 CppArmadillo 中计算高斯核向量的最快方法?

我正在尝试尽快计算高斯核评估向量。我在 R^p 中有一个数据点 x,以及一个由 n 个向量 x_i 组成的矩阵 X。我想为每个 x_i 计算 exp( -||x-x_i||^2 / t) 并将结果作为向量返回。

我已经尝试通过以下代码在 R 和 RcppArmadillo 中实现它

代码:

Rcpp犰狳:

不幸的是,我的 RcppArmadillo 代码并不比原始 R 代码快多少。我将在未来的代码/计算中计算数十万次内核向量,所以我希望这个过程尽可能快。

在进行微基准测试时,我得到以下结果:

快一点,但不是很多。

0 投票
1 回答
504 浏览

r - Rcpp中的布尔向量子集向量

我想用 bool 向量对向量 {1,2,3,4} 进行子集化。例如,如果我的布尔向量是 {false,true,true,true},我想得到向量 {2,3,4}。在常规 R 中,我可以这样做

其中 a,b,c,d 是布尔值。我的问题是双重的:1)如何使用 Armadillo/Rcpp 创建一个布尔向量,以及 2)如何使用该向量来子集我的向量 {1,2,3,4}。提前感谢您的宝贵时间。

0 投票
2 回答
150 浏览

rcpp - 将 C++ 函数用作由导出的 Rcpp 函数调用的另一个 C++ 函数的参数

我看到可以使用 Rcpp将R函数作为参数传递给C++ 。例如,您可以这样做:

这很好,但我正在寻找一些稍微不同的东西。

让我们成为以下函数:

我想使用作为参数调用func_2第三个函数。func_1那可能吗?例如,我正在寻求做:

这在 R 中是可能的,但是当我尝试使用 Rcpp/RcppArmadillo 时,我收到以下错误:

无法将 'f1' 从 'arma::mat ( )(arma::mat&)' {aka 'arma::Mat ( )(arma::Mat&)'} 转换为 'Rcpp::Function' {aka 'Rcpp: :Function_Impl'}