- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下玩具示例为 parallelFor
工作正常( f2
是 f1
的并行版本):
// [[Rcpp::depends(RcppParallel)]]
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
#include <RcppParallel.h>
#include <iostream>
#define vector NumericVector
using namespace Rcpp;
using namespace RcppParallel;
// compute values i/i+1 for i = 0 to n-1
// [[Rcpp::export]]
vector f1(int n) {
vector x(n);
for(int i = 0; i < n; i++) x[i] = (double) i/ (i+1);
return x;
}
struct mytry : public Worker {
vector output;
mytry(vector out) : output(out) {}
void operator()(std::size_t begin, std::size_t end) {
for(int i = begin; i < end; i++) output[i] = (double) i/ (i+1);
}
};
// [[Rcpp::export]]
vector f2(int n) {
vector x(n);
mytry A(x);
parallelFor(0, n, A);
return x;
}
#define vector NumericVector
来自
#define vector arma::vec
这不再起作用了。代码编译运行,
f1
没问题,但是
f2
返回的向量只包含未初始化的值。
最佳答案
这里的问题——你的类应该通过引用而不是值来获取向量。
这是因为,当使用 RcppParallel
时,您通常会在某处为某个对象预先分配内存,然后填充该对象——因此并行工作人员应该引用您想要填充的那个对象。
所以你的 worker 应该看起来像(正如你所指出的):
struct mytry : public Worker {
vector& output;
mytry(vector& out) : output(out) {}
void operator()(std::size_t begin, std::size_t end) {
for(int i = begin; i < end; i++) output[i] = (double) i/ (i+1);
}
arma::vec
或
std::vector
,当按值将其传递给工作人员时,您实际上是将一个全新的向量复制到类中,然后填充该(临时的、复制的)向量——因此原始向量实际上从未被填充。
关于rcpp - RcppArmadillo 和 RcppParallel 的同居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26234055/
考虑以下 R 代码, ## ----------- R version ----------- caller using namespace arma ; using n
RcppArmadillo 是我尝试安装的一些软件包的依赖项。我在编译 RcppArmadillo 版本 0.10.1.0.0 时收到此错误(这是 R 在发现 RcppArmadillo 是一个 de
我正在研究 a package ,它使用来自 RcppArmadillo 的随机数。该软件包运行 MCMC 算法,为了获得精确的再现性,用户应该能够设置随机数种子。执行此操作时,似乎用于从 Gamma
我是 Rcpp 的新手,正在尝试基于 for() 中的负索引执行计算- 使用 RcppArmadillo 循环。 我已经发现 RcppArmadillo 中的负索引不是那么简单,但是可以通过应该保留的
我正在尝试使用 RcppArmadillo 定义一个可以处理稀疏和密集矩阵输入的模板函数。我得到了一个非常简单的案例,将一个密集或稀疏矩阵发送到 C++,然后返回到 R 以像这样工作: library
我试图找到一个非常大的稀疏矩阵的特征值。我正在使用 RcppArmadillo 的 eig_gen 函数,它不是专门用于稀疏矩阵的,但只要计算是以单精度完成的,我就可以接受。所以我的 cpp 代码是:
我在我的 Rcpp 代码中使用 RcppArmadillo::sample,它在下面有这种奇怪的行为。 fun_good 按预期工作,从 x vector 中采样 1 个元素。然而,fun_bad 不
问题是我有一个变量 arma::mat prob_vec并想要相当于 rmultinom(1, 1, prob_vec) 的东西在 R。 我找到了 rmultinom RcppArmadillo 提供
这是一个用于绘制 N 的 C++ 函数均值为零和标准差的独立正态偏差s // [[Rcpp::depends(RcppArmadillo)]] #include using namespace Rc
我有以下 Rcpp/RcppArmadillo 函数,它计算矩阵中的相关距离 #include using namespace Rcpp; // [[Rcpp::export]] arma::mat
开始有 R 经验,但完全是 C++ 新手,我用 RcppArmadillo 编写了一些函数,并且对它的可用性和速度非常热情。我现在想使用函数 RcppArmadillo.package.skeleto
我在编译这个简单的 c++ 时遇到了一些麻烦代码使用 Rcpp和 RcppArmadillo包裹。以下面的简单示例将矩阵的每一列乘以数值标量: code (m); for(int i = 0; i :
问候和称呼, 我正在尝试使用字段对象类型而不是列表数据类型来避免必须发出复制命令。我试图这样做是为了减少与从列表中删除一个矩阵相关的时间,该矩阵由 Armadillo 的数据结构中已经定义的矩阵进行操
我正在尝试使用 RcppArmadillo 通过完全旋转来实现 LU 分解。幸运的是我有 this可以执行我想要的操作的 Matlab 代码,但我在将其转换为 Armadillo 时遇到了一些挑战。
将 log1p() 应用于整个 arma::vec 的合适方法是什么?似乎有 log() 和 exp() 的矢量化版本,但没有 log1p()。我发现 NumericVector 有语法糖,所以我最终
以下玩具示例为 parallelFor工作正常( f2 是 f1 的并行版本): // [[Rcpp::depends(RcppParallel)]] // [[Rcpp::depends(RcppA
我在编译 RcppArmadillo 时遇到问题。这是我尝试安装软件包时的结果: > install.packages("RcppArmadillo") Installing package(s)
我试图了解用 RcppArmadillo 编写的函数与使用 Armadillo 库在独立 C++ 程序中编写的函数之间的性能差异。例如,考虑以下简单函数,该函数使用传统教科书公式计算线性模型的系数。
真的很困惑为什么使用 RcppArmadillo 的 QR 输出与 R 的 QR 输出不同; Armadillo 文档也没有给出明确的答案。本质上,当我给 R 一个矩阵 Y 是 n * q (比如 1
我需要使用名为 dgebal 的 Fortran 例程(文档 here )在我的 Rcpparmadillo 代码中。我已经包含了以下标题: # include # include 但是,当我尝试
我是一名优秀的程序员,十分优秀!