使用 Rcpp 的 R 快速 cbind 矩阵

2024-05-06

cbindR中的重复调用比较耗时,但对于各种数据类型也很强大。 我编写的代码比cbind当绑定两个矩阵时。但bind_cols in dplyr封装速度仅比cbind。唯一遗憾的是它不能将矩阵作为输入。有人可以让下面的代码更快吗?另外,如何快速绑定稀疏矩阵?这是我使用的代码:

require( Rcpp )

func <- 'NumericMatrix mmult(NumericMatrix a,NumericMatrix b) {
    //the colnumber of first matrix
    int acoln=a.ncol();
    //the colnumber of second matrix
    int bcoln=b.ncol();
    //build a new matrix, the dim is a.nrow() and acoln+bcoln
    NumericMatrix out(a.nrow(),acoln+bcoln) ;
    for (int j = 0; j < acoln + bcoln; j++) {
        if (j < acoln) {
            out(_,j) = a(_,j);
        } else {
            //put the context in the second matrix to the new matrix
            out(_,j) = b(_,j-acoln);
        }
    }
    return out ;
}'

a <- matrix(rep(1,2000*100),2000)
b <- matrix(rep(2,2000*10),2000)

cppFunction(func)

system.time(for (i in seq(1,800)) {mmult(a,b)})
system.time(for (i in seq(1,800)) {cbind(a,b)})
identical(mmult(a,b),cbind(a,b))

借用这个想法comment https://stackoverflow.com/questions/29430726/vectorised-rcpp-random-binomial-draws/29432075#comment47035360_29432075作者:Romain Francois,关于我之前的 Rcpp 冒险之一,

func1 <- 'NumericMatrix mmult1(NumericMatrix a, NumericMatrix b) {
  int acoln = a.ncol();
  int bcoln = b.ncol();
  NumericMatrix out = no_init_matrix(a.nrow(), acoln + bcoln);
  for (int j = 0; j < acoln + bcoln; j++) {
    if (j < acoln) {
      out(_, j) = a(_, j);
    } else {
      out(_, j) = b(_, j - acoln);
    }
  }
  return out;
}'

cppFunction(func1)
set.seed(42)
a <- matrix(rnorm(1e7), 1e3)
b <- matrix(runif(1e7), 1e3)

identical(mmult(a, b), mmult1(a, b))
#TRUE

library(microbenchmark)
microbenchmark(mmult(a, b), 
               mmult1(a, b), 
               cbind(a, b),
               times = 10)

#Unit: milliseconds
#         expr    min     lq   mean median    uq   max neval
#  mmult(a, b)  69.64  70.52  89.71  72.28 128.8 136.6    10
# mmult1(a, b)  50.84  50.95  69.65  51.43 111.6 114.4    10
#  cbind(a, b) 192.35 194.67 201.13 195.30 196.1 255.9    10

没什么大不了的,但对于这样一个微不足道的改变来说也不错。

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

使用 Rcpp 的 R 快速 cbind 矩阵 的相关文章

  • 在 PHP 扩展中,推荐从 std::string 返回值的方法

    我们有一个简单的 PHP 函数 其目的是调用 C 自由函数std string callLibrary std string 并返回其std string返回值 目前看起来是这样的 PHP FUNCTION call library cha
  • 如何在方法模板中使用模板类型的引用传递参数?

    我目前正在努力编译以下代码 首先是包含带有方法模板的类的头文件 ConfigurationContext h class ConfigurationContext public template
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • R 中的闭包类似于 Python

    首先考虑以下 Python 代码 该代码计算函数被调用的次数 def counter fn count 0 def inner args kwargs nonlocal count count 1 print Function 0 was
  • “已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”

    我正在开发需要连接到另一个数据库以获取一些数据的应用程序 为此 我决定使用 SqlConnection reader 等 我需要执行一些查询 例如首先我需要获取某个用户的卡 ID 之后我需要通过该卡 ID 获取一些数据 这是我的代码 reg
  • Apple IOS 上的 C# 应用程序 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有基于 C Net 的应用程序 有什么方法可以在 Apple IOS 上运行这些应用程序吗 我没有资
  • 多个变量的分组描述性统计

    给定数据框 df Hup Hop testA testB Y Hi 1 1 N Lo 2 2 Y Mi 3 3 N No 4 4 Y Hi 5 5 N Lo 6 6 Y Mi 7 7 N No 8 8 Y Hi 9 9 N Lo 10 10
  • 使用 c# 中的 c++ ref 中的引用从 C# 调用 C++ 代码错误

    所以在我的 c dll 文件中我得到了以下函数 DLL void GetUserPass char userName char passWord userName ceva passWord altceva 现在我想从 c 调用它 但它给了
  • 使用 OpenSSL 库在 C++ 中生成 SHA 哈希值

    如何使用以下命令生成 SHA1 或 SHA2 哈希值OpenSSL https openssl org图书馆 我搜索了谷歌 找不到任何函数或示例代码 从命令行来看 很简单 printf compute sha1 openssl sha1 您
  • 为什么C++中没有“NULL引用”?

    我正在阅读 C 常见问题解答 8 6 什么时候应该使用引用 什么时候应该使用指针 http www parashift com c faq lite refs vs ptrs html 特别是以下声明 可以时使用引用 必要时使用指针 上述情
  • C++中的虚方法表存放在哪里?

    我想知道类对象 不是实例 而是类 如何存储在内存中 class A public int a virtual void f virtual A class B public A public int b void f final overr
  • 获取RFC返回的嵌套结构的值?

    我是 C 新手 我有 rfc 它以嵌套结构的形式从 SAP 系统返回数据 但是当我使用以下方式获取该数据时 IrfcTable table rfc getTable exporting parameter et customer 它仅返回第
  • 扩展一个类

    编辑回答 虽然我最初的问题并没有完全按照康拉德 鲁道夫提供的答案所解决的方式解释我的需求 但他 无意或有意 基本上为我写了我想写的内容 类本身不会被扩展 但通过使类了解新函数来扩展其功能 这些新函数允许它 类 处理更广泛的问题 我非常感谢您
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • 在 Ubuntu 16.04 上编译 PCL 1.7,CMake 生成的 Makefile 中出现错误

    我正在尝试让 PCL 1 7 点云库 而不是其他 pcl 在 Ubuntu 16 04 上运行 我最终希望用于 C 的东西 但现在我只是想让这些例子工作 我使用的是 Ubuntu GNU 5 3 1 附带的默认编译器和 Cmake 版本 3
  • Sharepoint 的 CAML 查询中的日期时间比较

    我正在尝试从共享点列表中获取某些项目 具体取决于自定义列中的日期 我已经使用 U2U Caml Builder 创建了查询 这很有效 但是当我将其放入 Web 部件中自己的代码中时 它总是返回列表中的所有项目 这是我的代码 DateTime
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • 错误:C# 尝试读取或写入受保护的内存

    我很难纠正这个错误 该应用程序在 4 台不同的机器上进行了测试 在其中 3 台上运行良好 但一台 Vista PC 在尝试通过 WebBrowser1 打开页面时出现此错误 解决这个问题的任何帮助对我都会非常有帮助 System Acces
  • Image.Save 异常“GDI+ 中发生一般错误。”保存到 MemoryStream 时

    我有一个服务器客户端应用程序 我想从服务器获取屏幕截图 但在线bitmap Save ms System Drawing Imaging ImageFormat Png 我得到这个例外 A generic error occurred in

随机推荐

  • 查找 Obj-C 中对象实例的所有引用

    我正在尝试找出一些错误 其中之一与内存泄漏有关 我可以看出该对象仍然有一个引用 因为 Instruments 仍然将其显示为活动状态 但 Instruments 不会将其注册为泄漏 无论如何 有没有办法查看 Objective C 中对象的
  • 如何使用 PHP 检测 zip 炸弹?

    我正在制作一个 PHP 脚本 用于检索用户给定的 zip 文件 将其解压缩 并使用其中的文件执行一些操作ZipArchive目的 我怎样才能避免像这样的拉链炸弹42 zip http www unforgettable dk 查看 zip
  • 是否可以一次显示 HTML 选择表单字段中的所有选项,而无需单击它?

    我正在使用 X Editable jQuery 就地编辑库作为任务状态选择字段 整个过程的所有阶段如下所示 单击状态 然后 它隐藏状态 SPAN 并显示隐藏的选择字段 您可以单击选择字段 使其下拉并显示所有可用选项 单击新的选择选项值 然后
  • 在 Swift 中获取可见的 IndexPath UICollectionView

    如何获得visible IndexPath while scrolling in collectionView 我参考了很多link1 https stackoverflow com questions 30281451 iterate o
  • Azure DocumentDB 本地模拟器是否支持 mongodb 协议?

    Azure DocumentDB 本地模拟器是否支持类似于 Azure 托管 DocumentDB 中可用的 MongoDB 协议的 mongodb 协议 我没有看到启动本地模拟器时指定协议的方法 是的 Azure DocumentDB 模
  • PHP cookie 和会员安全

    我创建了一个论坛 该论坛在登录时使用 PHP 会话来确定用户 ID 并使用 cookie 来进行日志登录 我想我有两个问题 这是最好 最安全的方法吗 可以使用javascript通过地址栏手动添加cookie 这是一个巨大的安全风险 有没有
  • 哪些参数被传递给回溯中的函数?

    在 R 中 如果执行因错误而停止 我可以评估traceback 查看哪个函数发生了错误 哪个函数是从哪个函数调用的 等等 它会给出类似这样的信息 8 ar yw default x aic aic order max order max n
  • 如何使用 jQuery 获取 asp:RadioButton 的选中值?

    我需要做这样的事情
  • 使用 Reporting Services 将组保持在一页上

    我使用 Reporting Services 创建了一个报表作为 C 应用程序的一部分 但我找不到一些我习惯在其他环境中看到的功能 我相信 MS Access 和 Crystal 报表都有一个名为 保持在一起 的选项 这样您就可以将特定的数
  • Django - 带上下文的重定向

    我有一个注册页面 它获取用户的用户名和密码并将其保存在数据库中 如果用户注册成功 我想将他重定向到 登录 页面 该页面的值表示注册成功 重定向页面上的预期输出 您已成功注册 Sign In Username Password 因此 我从注册
  • 修改多面图中的图例,ggplot2

    对于此图 我想将图例分成 2 个单独的图例 一种将脉冲湿地显示为圆形 其阴影对应于湿地编号 另一种将静态湿地显示为三角形 其灰色阴影对应于湿地编号 那么水文学传说就不再必要了 我想摆脱它 这就是我想要的图例的样子 当然要小一些 这是在 Po
  • 替换 woocommerce 面包屑中的主页链接

    我知道这是一个有点愚蠢的问题 但我像个傻瓜一样找不到正确的答案 目前这就是我的面包屑的样子 首页 男配音 德里克 道尔 我需要将主页链接名称更改为 Voice Overs 并将其链接到另一个页面 请任何帮助都会很棒 Thanks Wooco
  • 如何从与静态路径不同的目录提供静态文件?

    我正在尝试这个 favicon path path to favicon ico settings debug True static path os path join PATH static handlers r WebHandler
  • 使用 ScrollView 避免键盘输入

    我是 React Native 的新手 并且有一个我在 React Native 文档中没有找到的问题 我正在研究这个组件KeyboardAvoidingView https facebook github io react native
  • UITableView:以编程方式滚动内容视图

    您好 我正在尝试转发从 UITableView 前面的 UIView 收到的触摸 但这样做我不能再让桌子滚动了 see here https stackoverflow com questions 3417808 uitableview c
  • 寻找跨多维数组实现 logSumExp 的更快方法

    我正在编写的一些 R 代码中有一行非常慢 它使用 apply 命令在 4 维数组中应用 logSumExp 我想知道有什么办法可以加快速度 Reprex 这可能需要 10 秒或更长时间才能运行 library microbenchmark
  • Google Drive Api 在发布应用程序后停止工作

    我在我的应用程序中使用 google Drive api 当我使用 apk 文件安装它时 它在调试和发布版本上都能正常工作 但是 如果我在 Playstore 上发布相同版本的 apk 然后从那里下载它 我将无法登录 Google 关于这个
  • 创建符号数组

    有没有更干净的方法来做这样的事情 w address city state postal country map to sym gt address city state postal country 我本想 s本来可以做我想做的事 但事实
  • 使用openssl从服务器获取证书

    我正在尝试获取远程服务器的证书 然后可以将其添加到我的密钥库中并在我的 Java 应用程序中使用 一位高级开发人员 正在度假 告诉我我可以运行这个 openssl s client connect host host 9999 获取转储的原
  • 使用 Rcpp 的 R 快速 cbind 矩阵

    cbindR中的重复调用比较耗时 但对于各种数据类型也很强大 我编写的代码比cbind当绑定两个矩阵时 但bind cols in dplyr封装速度仅比cbind 唯一遗憾的是它不能将矩阵作为输入 有人可以让下面的代码更快吗 另外 如何快