如何使用RCPP初始化映射的映射
how to initialize mappedsparsematrix using Rcpp
我想通过R中的RCPP创建一个稀疏的矩阵。如果我在这一点上错了,请纠正我。
这是我的CPP表格中的代码
// [[Rcpp::depends(RcppEigen)]]
# include <RcppEigen.h>
# include <Rcpp.h>
# include <math.h>
# include <list>
using namespace Rcpp;
using Eigen::SparseMatrix;
using Eigen::MappedSparseMatrix;
using Eigen::MatrixXd;
using Eigen::VectorXi;
typedef Eigen::VectorXd Vd;
typedef Eigen::VectorXi Vi;
typedef Eigen::MappedSparseMatrix<double> MSpMat;
typedef MSpMat::InnerIterator InIterMat;
typedef List list;
typedef Eigen::Triplet<double> T;
double euclidean_distance(double lon1, double lat1,double lon2,double lat2){
double s = pow((lon1 - lon2),2) + pow((lat1 - lat2),2);
double ed = sqrt(s);
return(ed);
}
// [[Rcpp::export]]
MSpMat mymain(NumericVector lat, NumericVector lon){
std::list<T> L;
int length = lat.size();
int index = 0;
for (int i = 0; i < length - 1; i++ ){
for (int j = i+1; j < length; j++){
double lon1 = lon[i];
double lon2 = lon[j];
double lat1 = lat[i];
double lat2 = lat[j];
double dist = euclidean_distance(lon1,lat1,lon2,lat2);
dist = exp(-dist/0.001);
if (dist > 0.01 ){
L.push_back(T(index, i, dist));
L.push_back(T(index, j, -dist));
}
}
}
int nrows = L.size()/2;
int ncols = length;
MSpMat D(nrows, ncols);
D.setFromTriplets(L.begin(), L.end());
return(D);
}
但是,当我尝试在r。
no matching constructor for initialization of "MSpMat"
任何人可以帮助修复它吗?
好吧,完整错误是:
temp_eigen.cpp:51:10:错误:无匹配的构造函数来初始化'Mspmat'(又名'Mappapparsematrix') MSPMAT D(nrows,ncols); ^ ~~~~~~~~~~~~
注意:候选构造函数(隐式复制构造函数)不可行:需要1个参数,但提供了2个 类Mappapparsematrix ^
注意:候选构造函数不可行:需要6个参数,但提供了2个参数 内联映射映射Sparsematrix(索引行,索引COLS,INDEX NNZ,索引* ofterindexptr,index* inniNIndExptr,starcor* valuePtr)
从根本上讲,此处的错误正在尝试使用需要预先存在的内存位置并将其定义的数据类型(例如,两个步骤负载)。
更改:
MSpMat D(nrows, ncols);
to:
typedef Eigen::SparseMatrix< double > SpMat;
SpMat D(nrows, ncols);
产生所需的结果。
替代方法是提供一种形式:
MSpMat(Index rows, Index cols, Index nnz,
Index* outerIndexPtr, Index* innerIndexPtr,
Scalar* valuePtr)
相关文章:
- 内联映射初始化的动态atexit析构函数崩溃
- 在未初始化映射的情况下,将值插入到映射的映射中
- 在C++中初始化向量映射的最有效方法
- 初始化之前使用的静态映射
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 从另一个常量标准::映射初始化一个常量标准::映射的一部分
- 生成器用于提升::融合::使用不可复制的值类型进行映射初始化
- 映射的映射集的映射初始化错误
- std::映射初始化后的change key_comp
- 静态映射初始化
- 缺少用于映射初始化的构造函数
- 其中是在以下程序中创建的用于映射初始化的临时变量
- C++模板静态映射初始化
- 静态C++映射初始化错误C2552:无法使用初始值设定项列表初始化非聚合
- 静态映射初始化函数错误
- c++中的静态映射初始化
- 在c++中映射初始化以实现尝试
- 无序映射初始化失败
- 使用包含另一个类的函数指针的映射初始化
- STL映射初始化