RcppEigen - 从包中的内联函数到 .cpp 函数和“Map”

2024-04-17

一切似乎都在我的包中工作,但我想检查其步骤是否正确以及使用“Map”的内存使用情况。 (这是一个简单的示例,位于内联示例和fastLm()例子。)

这是一个内联函数,它取矩阵每一列的最大值:

library(Rcpp); 
library(inline); 
library(RcppEigen);

maxOverColCpp <- '
    using Eigen::Map;
    using Eigen::MatrixXd;

   // Map the double matrix AA from R
   const Map<MatrixXd> A(as<Map<MatrixXd> >(AA));

   // evaluate and columnwise maximum entry of A
   const MatrixXd Amax(A.colwise().maxCoeff());
   return wrap(Amax);
'

rcppeigen_max_over_columns <- cxxfunction(signature(AA = "matrix"), maxOverColCpp, plugin = "RcppEigen")

然后,为了更改该函数以将其包含在现有的 R 包中,我重写了代码,如下所示,将其保存在rcppeigen_max_over_columns.cpp在一个新的src现有 R 包中的文件夹:

// we only include RcppEigen.h which pulls Rcpp.h in for us
#include <RcppEigen.h>

// via the depends attribute we tell Rcpp to create hooks for
// RcppEigen so that the build process will know what to do
//
// [[Rcpp::depends(RcppEigen)]]

// via the exports attribute we tell Rcpp to make this function
// available from R
//
// [[Rcpp::export]]
Eigen::MatrixXd rcppeigen_max_over_columns(const Eigen::MatrixXd & A){
    Eigen::MatrixXd Amax = A.colwise().maxCoeff();
    return Amax;
}

(事实上​​,它有点长,因为我还需要找到行数的最大值。)

Then:

  • 用以下行修改了描述文件:

    导入:Rcpp (>= 0.11.3)、RcppEigen (>= 0.3.2.2.0)

    链接到:Rcpp、RcppEigen

  • 使用以下行修改 NAMESPACE 文件:

    useDynLib(toyRpackage)

    导入(RcppEigen)

    importFrom(Rcpp, evalCpp)

  • 在 R 终端中,输入以下内容,我认为它粘合了 R 和 C++:

    Rcpp::compileAttributes(pkgdir="toyRpackage", verbose=getOption("verbose"))

然后对于普通包裹,我做了R CMD check and R CMD build.

  • 第一个问题是将 RcppEigen 函数包含到现有 R 包中的过程是否正确? (我完全忽略了任何Makevars文件或任何.h文件——我真的不知道它们是做什么的...也不太理解对 NAMESPACE 文件的更改。我尝试复制RcppEigen.package.skeleteon()设置,但我将我的功能添加到现有的包中。所以最好知道是否可以,以防万一我错过了一些以后可能会出现问题的东西。)

  • 第二个问题是我是否需要某个地方的“地图”rcppeigen_max_over_columns.cpp这样当矩阵从 R 传递到 C++ 时就不会被复制?

我知道这是一个初学者问题,但我在理解 .cpp 文件中的语法时遇到了一些困难,因为我不懂 C++。我想也许这个问题可能会帮助其他也尝试向其包中添加简单功能的人。 :)

另外,如果您对使用 RcppEigen 而不是 RcppArmadillo 有任何强烈的感受,请告诉我。我读http://thread.gmane.org/gmane.comp.lang.r.rcpp/3522 http://thread.gmane.org/gmane.comp.lang.r.rcpp/3522这很有用。对于我在列上取最大值的示例,RcppEigen 似乎更快,不知道为什么。


第一个问题是将 RcppEigen 函数包含到现有 R 包中的过程是否正确? (我完全忽略了任何 Makevars 文件或任何 .h 文件 - 我真的不知道它们的作用...也不太了解 NAMESPACE 文件的更改。我尝试复制 RcppEigen.package.skeleteon( )设置,但我正在将我的函数添加到现有的包中。因此,最好知道它是否可以,以防万一我错过了以后可能会出现问题的东西。)

对于具有相对简单的 C++ 代码的基本 R 包,您不需要包含头文件、自定义 Makevars / Makefile 或类似的内容。如果您构建更复杂的东西,您可能需要 Makefile / Makevars 来帮助处理构建过程,并且可能希望使用头文件将接口与实现分开 - 但为此,您必须深入研究并挑选一些 C++ 书籍,因为有很多东西要学。

换句话说——你所做的一切都很好。对于简单的情况,只需使用就可以了.cpp文件在src/目录(并让Rcpp、属性及其其他兄弟包处理其余部分)

第二个问题是我是否需要 rcppeigen_max_over_columns.cpp 中的某个位置有一个“Map”,以便矩阵在从 R 传递到 C++ 时不会被复制?

好吧,当将 R 对象传输到(非Rcpp) 类,除非您专门使用可以重用底层数据的构造函数。我不知道 Eigen 是否有一个可以重用内存的构造函数,但我建议除非你know这很重要,不用担心(因为复制一系列数据通常非常快)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RcppEigen - 从包中的内联函数到 .cpp 函数和“Map” 的相关文章

  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 将列表(对象)转换为列表(字符串)

    有没有办法转换List of Object to a List of String 在 c 或 vb net 中而不迭代所有项目 幕后迭代很好 我只想要简洁的代码 Update 最好的方法可能就是进行新的选择 myList Select f
  • C++ 私有静态成员变量

    此 C 代码在编译时产生链接器错误 A h class A public static void f private static std vector
  • async wait 在调用异步方法时返回 Task> 而不是 List

    我正在尝试了解 async wait 的用法 并且研究了一些博客文章 现在我已经编写了一个测试代码 但它没有按照我期望的方式工作 我有一个返回列表的方法 private List
  • 在闪亮的应用程序中使用传单地图作为过滤器

    是否可以使用传单地图来过滤闪亮应用程序中的数据 就像在 Tableau 或 Power BI 中一样 方法是单击地图上的某个状态 然后根据条件过滤另一个图表或表格选择 None
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • Azure 2012 年 10 月 SDK 损坏 UseDevelopmentStorage=true

    有人尝试过使用 usedevelopmentstorage true 连接字符串的 2012 年 10 月 Azure sdk 吗 CloudStorageAccount Parse UseDevelopmentStorage true 抛
  • C++ 中的 Java ArrayList [重复]

    这个问题在这里已经有答案了 在Java中我可以做 List
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 枚举器上的 [[maybe_unused]]

    查看规格 maybe unused http en cppreference com w cpp language attributes 它指出 出现在类 typedef 变量 非静态数据成员 函数 枚举或枚举器的声明中 如果编译器对未使用
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • .Net Core 中的脚手架以及解决方案中的多个项目

    我创建了一个针对 net461 的 Net Core MVC6 应用程序 我使用了一个我非常熟悉的项目结构 其中我将数据 模型和服务类放置在单独的类库项目中 并且 Web 项目引用这些项目 当我尝试搭建控制器时 我收到一条错误 指出我正在搭
  • C# 的空条件委托调用线程安全吗? [复制]

    这个问题在这里已经有答案了 这就是我一直以来编写事件引发者的方式 例如属性更改 public event PropertyChangedEventHandler PropertyChanged private void RaisePrope
  • 使用互斥锁来阻止临界区外部的执行

    我不确定我的术语是否正确 但这里是 我有一个由多个线程使用的函数来写入数据 在注释中使用伪代码来说明我想要的内容 these are initiated in the constructor int data std atomic
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • 在类中使用 std::chrono::high_resolution_clock 播种 std::mt19937 的正确方法是什么?

    首先 大家好 这是我在这里提出的第一个问题 所以我希望我没有搞砸 在写这篇文章之前我用谷歌搜索了很多 我对编码 C 很陌生 我正在自学 考虑到有人告诉我 只为任何随机引擎播种一次是一个很好的做法 我在这里可能是错的 什么是正确 最佳 更有效

随机推荐

  • 如何读取iPhone设备控制台的内容?

    当设备通过 Xcode 插入我的机器时 我可以读取控制台 我需要构建一种方式来读取控制台 以便测试用户从设备获取控制台输出消息和崩溃报告 然后通过电子邮件对话框向其发送电子邮件 iOS 上是否存在控制台日志和崩溃报告所在的标准文件位置 控制
  • 如何在 Android 模拟器中连接 localhost? [复制]

    这个问题在这里已经有答案了 我在里面做了一个php脚本本地主机我将其与httpClient但我遇到了问题 请告诉我如何连接到 php 文件本地主机从模拟器 Use 10 0 2 2访问您的实际机器 正如您所知 当您使用模拟器时 localh
  • 意外的特质行为

    给定一个简单的代数数据类型Parent scala gt sealed trait Parent defined trait Parent scala gt case object Boy extends Parent defined ob
  • 当我通过列表映射时,React-bootstrap Modal 组件打开/关闭所有模态

    编程新手 所以如果我的措辞不正确 我很抱歉 我使用 map 来渲染和列出数组中的每个项目 对于每个项目 我希望模态仅打开 关闭与数组中每个项目相对应的特定模态 但是 当我单击按钮打开模式时 每个模式都会打开和关闭 我相信这是因为模态全部设置
  • 今天我们可以分享一下 App 类吗 - Widget-Extension

    我正在开发一个应用程序 我必须在 Today Widget Extension 中使用我的一些类 但我没有任何方式访问这些课程 是否可以访问 Today Widget Extension 中的应用程序类 有可能的 首先 您需要将类的目标设置
  • 如何在 Python 中使用 PKCS12 对 RSA 密钥进行编码?

    我正在使用 Python 在 Google App Engine 下 并且我有一些需要以 PKCS 12 格式导出的 RSA 私钥 有什么可以帮助我的吗 我正在使用 PyCrypto KeyCzar 并且我已经弄清楚如何以 PKCS8 格式
  • Mocha 在所有类中的所有测试运行后运行

    所以我正在使用 mocha 并且我有超过 10 个 JS 类的测试 我构建了一个日志变量 该变量在这 10 个类的整个测试运行过程中都有效 现在我想做的是在最后一次测试运行后 我想将此日志写入文件 所以我做的第一件事就是在每堂课上写这样的东
  • VBA getElementById 不适用于按钮

    我正在尝试访问网站 在文本框中键入一个值 然后单击搜索按钮来搜索我的值 我的问题是 我无法获取按钮元素来触发单击事件 VBA Dim i As Long Dim objElement As Object Dim objCollection
  • 如何符合协议变量的设置和获取?

    我正在研究协议以及如何遵守它们 protocol Human var height Int get set struct Boy Human var height Int return 5 error 我正在尝试学习实现 set 和 get
  • Firebase Storage 共享下载网址存在安全风险吗?

    我的 Firebase 存储中保存了一张图像 我想在我发送的多封电子邮件中显示此图像 到目前为止 我已使用从 Firebase 控制台获取的下载 URL 并且图像成功显示 我的问题是 这是分享图像的正确方式吗 安全吗 如果没有 那么我应该如
  • JsonValueProviderFactory 抛出“请求太大”

    我收到一个异常 即 JSON 请求太大而无法反序列化 它来自 JsonValueProviderFactory MVC 应用程序当前有一个使用 Json Net 的自定义模型绑定器 它在反序列化 json 数据时没有问题 但是我假设默认的
  • 什么是 AsyncManager.OutstandingOperations?

    感谢 MSDN 他们没有对此进行任何解释 http msdn microsoft com en us library system web mvc async asyncmanager outstandingoperations v vs
  • 如何使用 JavaSound (Java, Java Sound) 从 .wave 文件读取信息

    您好 我需要从 wave 文件中读取采样率 信号频率和幅度 我怎样才能使用 JavaSound 做到这一点 您可以通过获取句柄来获取采样率AudioFormat object AudioInputStream audioInputStrea
  • Phonegap + jQuery Mobile + 股票/折线图

    我试图找到一个在phonegap应用程序中绘制折线 股票图表的解决方案 我尝试过很多库 amcharts JS highcharts 但没有一个能工作 有人可以帮我完成这项任务吗 欢迎任何解决方案 平台 Android iOS 我有同样的问
  • 通过电子邮件询问评级

    在我的应用程序中 我们将通过向用户发送电子邮件来获取反馈 因此 如果用户填写字段并提交 那么我会将其存储在我的数据库中 我准备了一封 html 邮件 如下所示 但这里的问题是我无法在邮件中显示评级星星 这需要内联 css 但我无法将该 cs
  • AdMob 横幅不适用于移动数据

    我最近开始开发 Android 应用程序 当尝试在我的应用程序中加载横幅时 我在 logcat 中收到以下错误 03 02 17 30 58 509 I Ads 12181 Use AdRequest Builder addTestDevi
  • 给出源时,Django Rest Framework Serializer charfield 不更新

    我有一个带有选择 charfield 的模型字段 class Vehicle models Model name models CharField max length 100 STATUS CHOICES N New U Used P J
  • 如何在 Visual Studio Code 中更新 C# 版本?

    我已经安装了 C 扩展 我的 NET 框架已更新 但我无法修复它 我已经找到了修复方法 希望这对将来的人有所帮助 找你的 csproj file 将 LangVersion 属性更改为所需版本
  • AMD64 ABI 中的空类会发生什么情况?

    我正在看AMD64 ABI http www cs tufts edu comp 40 readings amd64 abi pdf并且它似乎没有指定如何传递空类类型 对于空类成员函数 似乎this照常传递 但对于空类 Clang 生成的代
  • RcppEigen - 从包中的内联函数到 .cpp 函数和“Map”

    一切似乎都在我的包中工作 但我想检查其步骤是否正确以及使用 Map 的内存使用情况 这是一个简单的示例 位于内联示例和fastLm 例子 这是一个内联函数 它取矩阵每一列的最大值 library Rcpp library inline li