RcppArmadillo: arma::cube 的向量

     2023-02-16     125

关键词:

【中文标题】RcppArmadillo: arma::cube 的向量【英文标题】:RcppArmadillo: vector of arma::cube's 【发布时间】:2018-04-19 16:05:18 【问题描述】:

我正在使用 RcppArmadillo 在 R / Rcpp 中开发应用程序,并且我需要使用 arma::cube 对象的向量。以下示例运行良好。

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace std;
using namespace Rcpp;
using namespace arma;

// [[Rcpp::export]]
bool posterior(int n, int L, NumericVector N, int TIME) 
    vector<cube> A(TIME);
    for (int t = 0; t < TIME; t++) A[t] = cube(n, L, max(N), fill::zeros);

    Rprintf("*** %.2f ***\n", A[3].at(5, 1, 2));

    return true;

这里有一些 R 代码来测试它。

library(Rcpp)

sourceCpp("VectorOfCubes.cpp")

posterior(200, 3, c(10, 5, 2), 10^4)

我的问题是:可以去掉上面C++函数中的for,直接初始化向量A吗?

【问题讨论】:

【参考方案1】:

为什么不使用默认的vector 构造函数?

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
bool posterior_default(int n, int L, Rcpp::NumericVector N, int TIME) 
  std::vector<arma::cube> A(TIME, arma::cube(n, L, max(N), arma::fill::zeros));

  return true;

您可以使用std::fill 算法,c.f.

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
bool posterior(int n, int L, Rcpp::NumericVector N, int TIME) 
  std::vector<arma::cube> A(TIME);

  std::fill(A.begin(), A.end(), arma::cube(n, L, max(N), arma::fill::zeros));

  return true;

不过,一个更简单的变体是使用arma::field 来存储值而不是std::vector,然后使用.fill() 成员函数。

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::field<arma::cube> posterior_field(int n, int L, Rcpp::NumericVector N, int TIME) 
  arma::field<arma::cube> A(TIME);

  A.fill(arma::cube(n, L, max(N), arma::fill::zeros));

  return A;

输出:

posterior_field(3, 4, c(1,2,3), 10)
#      [,1]      
# [1,] Numeric,36
# [2,] Numeric,36
# [3,] Numeric,36
# [4,] Numeric,36
# [5,] Numeric,36
# [6,] Numeric,36
# [7,] Numeric,36
# [8,] Numeric,36
# [9,] Numeric,36
# [10,] Numeric,36

【讨论】:

很好的答案!非常感谢! 还有一件事。使用您的第二个建议arma::field&lt;arma::cube&gt; A(TIME); A.fill(arma::cube(n, L, max(N), arma::fill::zeros));,我以A[1].at(5, 1, 2) 访问这些元素。但是at() 不会检查边界,对吗?我有办法访问检查边界的元素吗? 正确的.at() 不做边界检查。要使用 边界检查的 2D 或 3D 子集,您需要使用 (x,y)(x,y,z)。例如double b = A[1](5, 1, 2); 完美运行!再次感谢您。

RcppArmadillo 是不是还有用于字符数组的 arma::Cube 类型?

】RcppArmadillo是不是还有用于字符数组的arma::Cube类型?【英文标题】:DoesRcppArmadillohaveyetanarma::Cubetypeforcharacterarrays?RcppArmadillo是否还有用于字符数组的arma::Cube类型?【发布时间】:2017-12-2916:56:16【问题描述】:我正在慢慢进入Rcp... 查看详情

将 arma::cube 子视图转换为 NumericVector 以使用糖

...个3D数组从R传递到C++并遇到了类型转换问题。我们如何将RcppArmadillo中的arma::cubesubviews转换为NumericVectors以使用Rcpp中的糖函 查看详情

无法编译 RcppArmadillo

】无法编译RcppArmadillo【英文标题】:CannotcompileRcppArmadillo【发布时间】:2020-11-0220:21:54【问题描述】:RcppArmadillo是我尝试安装的几个软件包的依赖项。我在编译RcppArmadillo版本0.10.1.0.0时收到此错误(这是R在发现RcppArmadillo是一个d... 查看详情

RcppArmadillo:对角矩阵乘法很慢

】RcppArmadillo:对角矩阵乘法很慢【英文标题】:RcppArmadillo:diagonalmatrixmultiplicationisveryslow【发布时间】:2019-11-0223:15:00【问题描述】:设x为向量,M为矩阵。在R中,我可以做到D<-diag(exp(x))crossprod(M,D%M)在RcppArmadillo中,我有以下... 查看详情

在 R 中安装 RcppArmadillo

】在R中安装RcppArmadillo【英文标题】:InstallingRcppArmadilloinR【发布时间】:2019-09-0417:44:44【问题描述】:我在尝试在R中安装RcppArmadillo时遇到此错误,这让我发疯了,我无法找到如何处理它:Error:packageornamespaceloadfailedfor‘RcppArmadil... 查看详情

Rcpparmadillo c++ 创建布尔向量

】Rcpparmadilloc++创建布尔向量【英文标题】:Rcpparmadilloc++createboolvector【发布时间】:2015-08-3111:12:48【问题描述】:我正在尝试将bool向量作为参数传递给使用Rcpparmadillo的函数。一个愚蠢的例子是这样的://[[Rcpp::depends(RcppArmadillo)]]... 查看详情

RcppArmadillo:for循环中的负索引

】RcppArmadillo:for循环中的负索引【英文标题】:RcppArmadillo:Negativeindexinginfor-loop【发布时间】:2020-09-0209:14:06【问题描述】:我是Rcpp新手,我正在尝试使用RcppArmadillo在for()-loop中基于负索引执行计算。我已经发现RcppArmadillo中的负... 查看详情

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

】编译RcppArmadillo时遇到问题-未找到库gfortran【英文标题】:HavinganissuewithcompilingRcppArmadillo-librarygfortrannotfound【发布时间】:2019-03-0902:25:16【问题描述】:跑步:install.packages("RcppArmadillo")我收到以下错误:ld:warning:directorynotfoundforo... 查看详情

犰狳+NVBLAS 变成 RcppArmadillo+NVBLAS

】犰狳+NVBLAS变成RcppArmadillo+NVBLAS【英文标题】:Armadillo+NVBLASintoRcppArmadillo+NVBLAS【发布时间】:2015-09-2012:47:48【问题描述】:TLDR;对于那些想要避免阅读整个故事的人:是有一种方法可以将RcppArmadillo与NVBLAS接口以利用GPU,更像是... 查看详情

RcppArmadillo 和 Armadillo 之间的性能差异

】RcppArmadillo和Armadillo之间的性能差异【英文标题】:PerformancedifferencebetweenRcppArmadilloandArmadillo【发布时间】:2014-04-1400:19:02【问题描述】:我试图了解用RcppArmadillo编写的函数与使用Armadillo库以独立C++程序编写的函数之间的性能... 查看详情

犰狳矢量类上的 RcppArmadillo 样本

】犰狳矢量类上的RcppArmadillo样本【英文标题】:RcppArmadillosampleonarmadillovectorclasses【发布时间】:2017-04-1117:58:45【问题描述】:我们一直在使用RcppArmadillo中的sample函数来随机采样NumericVector对象。然而,我们注意到不可能在犰狳... 查看详情

使用带有 RcppArmadillo 的 SuperLU 稀疏求解器

】使用带有RcppArmadillo的SuperLU稀疏求解器【英文标题】:UsingSuperLUsparsesolverwithRcppArmadillo【发布时间】:2020-03-2907:36:55【问题描述】:我正在尝试通过RcppArmadillo使用来自犰狳(http://arma.sourceforge.net/docs.html#spsolve)的SparseLU求解器:#de... 查看详情

在 macOS Catalina 上安装 RcppArmadillo 时出错 [重复]

】在macOSCatalina上安装RcppArmadillo时出错[重复]【英文标题】:ErrorinstallRcppArmadilloonmacOSCatalina[duplicate]【发布时间】:2019-10-1906:41:48【问题描述】:我按照RCompilerToolsforRcpponmacOS(forR3.6.x)中的步骤进行操作,但是当我尝试安装RcppArmadil... 查看详情

RcppArmadillo 和 RcppGSL

】RcppArmadillo和RcppGSL【英文标题】:RcppArmadilloandRcppGSL【发布时间】:2013-12-1516:23:11【问题描述】:我想通过sourceCpp同时使用。基本上我有兴趣修改B样条示例http://dirk.eddelbuettel.com/blog/2012/12/08/因此B样条是R^3的函数,而不仅仅是R^1... 查看详情

如何在 Windows 上为旧 R 匹配 Rcpp 和 RcppArmadillo 的版本?

】如何在Windows上为旧R匹配Rcpp和RcppArmadillo的版本?【英文标题】:howtomatchversionsofRcppandRcppArmadilloforolderRonwindows?【发布时间】:2015-02-1016:43:41【问题描述】:我使用R3.1.2和最新版本的Rcpp0.11.3和RcppArmadillo0.4.600.0在Windows(Win7,64位... 查看详情

使用 RcppArmadillo 时调用 one 或 eye 函数失败

】使用RcppArmadillo时调用one或eye函数失败【英文标题】:FailtocallonesoreyefunctionwhenusingRcppArmadillo【发布时间】:2021-04-0815:15:19【问题描述】:我想在Armadillo中使用one或eye函数来构造矩阵或向量。但是,它不允许我这样做。这是一个... 查看详情

使用 RcppArmadillo 对矩阵进行非连续子集化

】使用RcppArmadillo对矩阵进行非连续子集化【英文标题】:Non-contiguoussubsettingofmatrixwithRcppArmadillo【发布时间】:2020-08-0116:44:59【问题描述】:您好,很抱歉这个可能很愚蠢的问题。我过去学了一点C++,但在过去的几年里,我只使... 查看详情

为啥'&'运算符在 RcppArmadillo 中不起作用

】为啥\\\'&\\\'运算符在RcppArmadillo中不起作用【英文标题】:Whyis\'&\'operatornotworkinginRcppArmadillo为什么\'&\'运算符在RcppArmadillo中不起作用【发布时间】:2019-09-2805:20:53【问题描述】:我正在尝试从通过元素“&”连接的... 查看详情