- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写代码使用 RcppParallel 计算 v^T Av。这里 v 是一个大小为 n 的 vector ,A 是一个 n×n 矩阵。我的想法是以并行方式评估 Av,然后计算该 vector 与 v 的内积。这是我的代码:
#include <Rcpp.h>
// [[Rcpp::depends(RcppParallel)]]
#include <RcppParallel.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>
using namespace std;
using namespace Rcpp;
using namespace RcppParallel;
struct Par_MatVec_Mult: public Worker {
const RMatrix<double> Mat;
const vector<double> Vec;
vector<double> output;
Par_MatVec_Mult(RMatrix<double> A, vector<double> v, vector<double> Av): \
vector<double> Av): Mat(A), Vec(v), output(Av) { }
void operator() ( size_t begin, size_t end) {
for( size_t i = begin; i < end; i++ ) {
RMatrix<double>::Row rowi = Mat.row(i);
output.at(i) = inner_product( rowi.begin(), rowi.end(),Vec.begin(), \
0.0 );
}
}
};
// [[Rcpp::export]]
double Parallel_MatVec_Mult( NumericMatrix A, vector<double> v ){
vector<double> b( A.nrow(), 0.0 );
Par_MatVec_Mult Av(A, v, b);
parallelFor(0, A.nrow(), Av);
return inner_product( Av.output.begin(), Av.output.end(), v.begin(), 0.0 );
}
编译时出现以下错误。
no known conversion for argument 1 from 'Rcpp::NumericMatrix {akaRcpp::Matrix<14>}'
to 'RcppParallel::RMatrix<double>'
我很清楚 NumericMatrix 和 RMatrix 是两个不同的对象。但是我不知道它们到底有什么区别,以及如何更改我的代码以消除此错误。
顺便说一句,我在 Windows 10 上使用 RStudio 0.99.903。
最佳答案
single-argument constructor RMatrix
被标记为 explicit
:
inline explicit RMatrix(const Source& source)
: data_(const_cast<Source&>(source).begin()),
nrow_(source.nrow()),
ncol_(source.ncol())
{}
您已为 Par_MatVec_Mult
构造函数提供此签名
Par_MatVec_Mult(RMatrix<double> A, vector<double> v, vector<double> Av)
并试图稍后将 NumericMatrix
传递给它。这将需要在 RMatrix
的构造中进行隐式转换,但由于原本合适的构造函数被标记为 explicit
,因此这是不允许的,并且会出现错误.
这是一个简单的例子来证明这一点:
#include <Rcpp.h>
class Wrapper {
private:
std::size_t nr;
std::size_t nc;
public:
template <typename T>
explicit Wrapper(const T& t)
: nr(t.nrow()),
nc(t.ncol())
{}
std::size_t size() const { return nr * nc; }
};
// [[Rcpp::export]]
int test(Rcpp::NumericMatrix x) {
// Wrapper w = x; // Error: conversion from ‘Rcpp::NumericMatrix
// {aka Rcpp::Matrix<14>}’ to non-scalar
// type ‘Wrapper’ requested
Wrapper w(x); // Ok
return w.size();
}
在您的情况下,修复很简单:只需将 Par_MatVec_Mult
的构造函数的签名更改为:
Par_MatVec_Mult(NumericMatrix A, vector<double> v, vector<double> Av)
关于c++ - RcppParallel 中二次型的并行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40368973/
我想编写代码使用 RcppParallel 计算 v^T Av。这里 v 是一个大小为 n 的 vector ,A 是一个 n×n 矩阵。我的想法是以并行方式评估 Av,然后计算该 vector 与
我写了下面的代码来训练自己使用 RcppParallel。这只是一个玩具示例。 // [[Rcpp::depends(RcppParallel)]] #include #include #incl
灵感来自文章 http://gallery.rcpp.org/articles/parallel-distance-matrix/ ,我尝试使用 RcppParallel 在高维参数空间中运行强力搜索
我正在尝试使用 RcppParallel 并行添加(大)向量。这就是我想出的办法。 // [[Rcpp::depends(RcppParallel)]] #include #include #in
我有一个矩阵,我想为它计算第 i 行和每隔一行(即我想要 i成对距离矩阵的第 th 行)。 #include #include #include #include //#include #i
以下玩具示例为 parallelFor工作正常( f2 是 f1 的并行版本): // [[Rcpp::depends(RcppParallel)]] // [[Rcpp::depends(RcppA
我正在学习在我的工作中使用 RcppParallel,并试图安装一个使用 Rcpp.package.skeleton() 制作的简单包。该软件包包含三个源文件,即 Rcpp 的 HelloWorld
我需要与 RcppParallel::RMatrix 合作.以前我曾与 Rcpp只要。但现在为 RcppParallel我需要一份文件,例如 Rcpp拥有。 例如 我 Rcpp::NumericMat
我是 C++ 编程的新手,正在尝试通过 R 试验 Rcpp。我创建了一个函数来从一个字符串中生成所有可能的 k-mers。它以它的串行形式运行良好: #include #include #incl
我有一个任务需要处理一个大型矩阵(数百万行,数百列)字符串。每行操作都是独立的。因此,我想利用一些并行计算来提高整个项目的速度。 如果我为数值矩阵构建myWorker,如下所示,我能够编译代码而不会出
我正在使用此 Rcpp 代码执行 quickselect在值向量上,即在 O(n) 时间内从向量中获取第 k 个最大元素(我将其保存为 qselect.cpp): // [[Rcpp::depends
概览:我对并行化(跨链)Gibbs 采样器感兴趣,以解决我遇到的非平凡回归问题 already implemented通过 Rcpp/RcppEigen 串行。我已阅读 RcppParallel 的文
我想在 RcppPralel worker 中使用线程安全函数指针。但是我已经对这个小例子产生了疑问。无论我是在包中使用它并在 DESCRIPTION 文件中添加 SystemRequirements
我是一名优秀的程序员,十分优秀!