矩阵列表乘以标量,Rcpp 中不保留维度属性

2024-03-12

我正在使用 Rcpp 来加速一些 R 代码(实际上这是我 2014 年“待办事项”列表中的项目之一),部分代码包括将矩阵列表乘以标量,我能够得到结果,尽管如此,矩阵不再是矩阵,而是向量,我想要一个矩阵列表作为最终输出。

这是我到目前为止的代码:

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;     
using namespace arma;     

// I got this template from here: http://stackoverflow.com/a/18014655/1315767
template <typename WHAT>
class ListOf : public List {
public:
    template <typename T>
    ListOf( const T& x) : List(x){}

    WHAT operator[](int i){ return as<WHAT>( ( (List*)this)->operator[]( i) ) ; }

} ;

// [[Rcpp::export]]


List FooList(NumericVector fi1, ListOf<NumericMatrix> Ct){

  List TempList(Ct.size());
  NumericMatrix ct(2,2);


  for(int i=0; i<Ct.size(); i++){
    ct = Ct[i] ;
    TempList[i] = ct * fi1[i] ;  // multiply each matrix by each scalar in fi1
  }
   return TempList;
}

运行此代码时,我得到以下信息:

> sourceCpp("FooList.cpp")
> A <- replicate(3,matrix(1:4, 2), simplify=FALSE) # a list of matrices
> vec <- 0.5 * c(1:3)                              # a vector
> FooList(vec, A)  # dim are not preserved
[[1]]
[1] 0.5 1.0 1.5 2.0

[[2]]
[1] 1 2 3 4

[[3]]
[1] 1.5 3.0 4.5 6.0

输出由下式给出FooList可以,但格式不行,我期望得到这样的结果:

[[1]]
     [,1] [,2]
[1,]  0.5  1.5
[2,]  1.0  2.0

[[2]]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

[[3]]
     [,1] [,2]
[1,]  1.5  4.5
[2,]  3.0  6.0

我不明白为什么我会得到这个输出,因为ct是一个矩阵,如果我去掉fi1[i]输出确实是一个矩阵列表,我什至尝试使用as_scalar(fi)我得到的和以前一样。我也尝试过使用ct.attr("dim") = Dimension(2, 2);没有成功。


关键问题是,当您在 C++ 中将矩阵乘以标量时,您使用的是Rcpp的语法糖为*,它是矢量化的。无论出于何种原因,它不理解如何返回矩阵(我没有广泛查看文档)。

如果我们将每个矩阵的每个元素乘以标量,您将得到预期的结果:

FooList.R

// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;

// I got this template from here: http://stackoverflow.com/a/18014655/1315767
template <typename WHAT>
class ListOf : public List {
public:
    template <typename T>
    ListOf( const T& x) : List(x){}

    WHAT operator[](int i){ return as<WHAT>( ( (List*)this)->operator[]( i) ) ; } 

} ;

// [[Rcpp::export]]


List FooList(NumericVector fi1, ListOf<NumericMatrix> Ct){

  List TempList(Ct.size());
  NumericMatrix ct(2,2);


  for(int i=0; i<Ct.size(); i++){
    ct = Ct[i] ;
    for (int j=0; j < ct.nrow(); j++) {
      for (int k=0; k < ct.ncol(); k++) {
        ct(j, k) *= fi1[i];  // Multiply each element of the matrix by the scalar in fi1
      }   
    }   
    TempList[i] = ct;                                                                                                                                                                                                                      
  }
   return TempList;
}

互动环节:

> sourceCpp("FooList.cpp")
> A <- replicate(3,matrix(1:4, 2), simplify=FALSE) # a list of matrices
> vec <- 0.5 * c(1:3)                              # a vector
> FooList(vec, A) 
[[1]]
     [,1] [,2]
[1,]  0.5  1.5
[2,]  1.0  2.0

[[2]]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

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

矩阵列表乘以标量,Rcpp 中不保留维度属性 的相关文章

  • 如何有效地将多个光栅 (.tif) 文件导入 R

    我是 R 新手 尤其是在空间数据方面 我正在尝试找到一种方法来有效地将多个 600 单波段栅格 tif 文件导入到 R 中 所有文件都存储在同一文件夹中 不确定这是否重要 但请注意 在我的 Mac 和 Windows 并行 VM 上的文件夹
  • R data.table 连接不等式条件

    我想使用 data table 包根据多个不等式条件对数据进行子集化 data table 手册中的示例展示了如何使用字符变量执行此操作 但不显示数字不等式 我还了解了如何使用子集函数来执行此操作 但我真的很想利用 data table 二
  • 如何从连接矩阵绘制图像?

    我想编写一个脚本来从连接矩阵创建图像 基本上 只要矩阵中有 1 我就希望该区域在图像中被着色 对于例如 我使用 Photoshop 创建了这张图像 但我有一个很大的数据集 所以我必须自动化这个过程 如果有人能指出我正确的方向 那将非常有帮助
  • 如何使用autoconf重新生成配置文件?

    我使用 autoconf 重新生成配置文件 它有效 但是当我执行生成的配置文件时 configure 有一些错误消息 例如 configure line 3713 syntax error near unexpected token bla
  • 根据 R 数据框中的名称对列进行平均

    我想知道是否有一种有效的方法来获取每组的平均值类似命名的列谁的名字结尾为 1S and 2S ex ex1S ex2S at time 1并取每组的平均值类似命名的列谁的名字结尾为 1C or 2C ex ex1C ex2C at time
  • 如何在R中匹配具有相同主键的两个表中的数据

    我有两个表 其中包含有关人员的数据 df1 lt data frame id c 113 202 377 288 359 name c Alex Silvia Peter Jack Jonny 这为我提供了 id name 1 113 Al
  • 根据 row_number() 过滤 data.frame

    更新 自从提出这个问题以来 dplyr 已经更新 现在按照 OP 的要求执行 我正在尝试获取第二行到第七行data frame using dplyr 我正在这样做 require dplyr df lt data frame id 1 1
  • 如何总结此R问题中的销售数量、售出酒类数量和花费金额

    我使用以下代码在 R 上上传我的数据 if file exists ames liquor rds url lt https github com ds202 at ISU materials blob master 03 tidyvers
  • 按组计算连续行中的值之间的差异

    这是我的一个df 数据框 group value 1 10 1 20 1 25 2 5 2 10 2 15 我需要按组计算连续行中的值之间的差异 所以 我需要一个结果 group value diff 1 10 NA because the
  • 如果条目出现次数少于 x 则删除数据框中的行

    我有以下数据框 称之为 df 它是由三个向量组成的数据框 姓名 年龄 和 邮政编码 df Name Age ZipCode 1 Joe 16 60559 2 Jim 20 60637 3 Bob 64 94127 4 Joe 23 9412
  • 使用 ggplot 构面时增加闪亮的绘图大小

    有没有办法增加绘图窗口的大小shiny取决于在一个中使用的面的数量ggplot图 也许使用垂直滚动 例如 使用下面的示例 当输入为 A 有三个方面 情节看起来不错 当选项 B 选择绘图数量会增加 但绘图窗口保持相同大小 导致绘图太小 是否有
  • 如何在 flutter 中仅显示列表中的 5 项

    我想在 flutter 中显示一个列表 我正在使用listView 问题是我只想显示 5 个项目 我的意思是当用户向下滚动时我想从开始索引中删除并将另一个小部件添加到包含我的小部件的列表的末尾 但是当我这样做时ScrollView 不会停留
  • scala 返回列表中的第一个 Some

    我有一个清单l List T1 目前我正在执行以下操作 myfun T1 gt Option T2 val x Option T2 l map myfun l flatten find gt true The myfun函数返回 None
  • 如何绘制每条线之间具有特定距离的图形

    实际上 我尝试绘制一个图形 但它将所有列 线 放在一起并显示 因此它不具有代表性 我尝试制作模拟数据并向您展示我如何绘制它 并向您展示我想要的内容 我不知道如何制作像下面所示的示例的数据 但我在这里做了什么 set seed 1 M lt
  • 如何从 R 数据框中提取关键字

    我是 R 中文本挖掘的新手 我想从数据框的列中删除停用词 即提取关键字 并将这些关键字放入新列中 我尝试制作一个语料库 但它对我没有帮助 df C3是我目前拥有的 我想添加栏目df C4 但我无法让它工作 df lt structure l
  • 排序因素与水平

    有人能解释一下 R 中 ordered 参数的用途吗 R says ordered逻辑标志来确定级别是否应被视为有序 按给定的顺序 所以如果我有一个名为名称的因素并设置ordered TRUE names lt factor c fred
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 当有很多列时,使用 readr::read_csv() 导入数据时覆盖列类型

    我正在尝试使用 R 中的 readr read csv 读取 csv 文件 我导入的 csv 文件大约有 150 列 我只包含示例的前几列 我希望将第二列从默认类型 我执行 read csv 时为日期 覆盖为字符或其他日期格式 GIS Jo
  • 按特定样本前缀对列名称向量进行子集化

    假设我有一个如下所示的数据框 ca01 lt c 1 10 ca02 lt c 2 11 ca03 lt c 3 12 stuff 1 lt rep test 10 other lt rep 9 10 data lt data frame
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor

随机推荐

  • 离子滚动到特定列表项

    有没有办法滚动到离子列表中的特定项目 例如在此代码笔中 https codepen io anon pen grEBQJ https codepen io anon pen grEBQJ 当我转到测试按钮时 我想滚动到带有文本 文本 的列表
  • GBM 上的 EGLDisplay

    我想通过 EGL 创建 OpenGL 上下文 由于我实际上不会绘图 所以我想将 Pbuffers 与 GBM 平台结合使用 这是代码 C99 include
  • 有没有办法在 pysvg 中添加换行符?

    考虑以下最小工作示例 from pysvg text import from pysvg builders import doc svg doc addElement text hello nWorld 150 50 doc save He
  • 是否有 WebMethod 的替代方案来绕过回发但访问会话

    因此 我正在尝试提高 ASP Net Webforms 应用程序的性能 像往常一样 回发会尽力降低性能 我开始了解 WebMethod 调用 我也设法开始工作 然而 对于我的特定场景 我需要访问会话 这在静态方法中显然是不可能的 所以现在我
  • Swift 3 - 如何将包含结构的结构数组转换为 JSON?

    我有一个数组Field我想要转换为 JSON 字符串的结构 Field定义为 struct Field var name String var center LatLng var perimeter LatLng func toDictio
  • 为什么 Azure 通知中心标签不保存?

    我正在尝试向通知中心发送消息 但我的标签未保存 I checked service hub with service hub explorer and tags are empty 设备注册 var hs new HashSet
  • MapReduce - 如何按值对减少输出进行排序

    如何按值降序对减速器输出进行排序 我正在开发一个必须返回最常听的歌曲的应用程序 因此 歌曲必须按照收听次数排序 我的应用程序以这种方式工作 Input songname userid boolean MapOutput songname u
  • 发现插件与新版本不兼容:Firebase Services

    我无法更新到 Android Studio 4 0 当我检查更新时 它向我显示以下消息 发现与新版本不兼容的插件 Firebase Services 这是 Android Studio 插件的 Firebase 服务 https plugi
  • Log4j2 RegexFilter 模式不匹配

    我的日志中有以下几行我想排除 所以我想使用RegexFilter这样做 INFO 2018 05 20 14 52 15 993 qtp22844606 20 TimingFilter Request time 16 ms INFO 201
  • ContinueWith TaskContinuationOptions.OnlyOnFaulted 似乎没有捕获从已启动任务引发的异常

    我正在尝试使用 ContinueWith 和 OnlyOnFaulted 捕获从任务方法引发的异常 如下所示 但是 当我尝试运行此代码时 出现未处理的异常 我希望任务能够完成 因为我已经处理了异常 但是 Task Wait 遇到 Aggre
  • Angular4 项目上字体很棒的图标未加载

    我正在使用 font awesome 开发 Angular 4 项目 我按照本指南使用 npm 安装库 如何将 font awesome 添加到 Angular 2 CLI 项目 https stackoverflow com questi
  • 根据多个任意模式验证 XML

    考虑一个具有多个模式的 XML 文档 其开头如下所示 这不是 Spring 特定的问题 这只是示例的一个方便的 XML 文档
  • 为什么 GetAttr 不适用于 cloudformation 模板参数?

    拥有父子关系中的 cloudformation 模板集合 并希望将 AWS IAM Role 传递到子堆栈的参数中 并使用 GetAttr 获取 Arn 这会导致验证失败 因为只能对资源调用 GetAttr 而不能对参数调用 有人知道 猜猜
  • 当服务器在Linux中启动时,Spring Boot出现错误

    首先 有两个Linux服务器 我想建立一个冗余的web server在两台服务器上 我在两台服务器上均等地安装了jre1 8 0 并且我在两台服务器上均等地安装了相同的spring boot war文件 顺便一提 服务器1正常启动并正常工作
  • 如何在 ruby​​ on Rails 中调用存储过程?

    我是 ROR 新手 我想在单击 VIEW 中的提交按钮时调用存储过程进行处理 Model class Pro DataImport lt ActiveRecord Base attr accessible file name process
  • NamedPipe 多个服务器

    对于简单的 IPC 我选择了 NamedPipes 在进程 本地 之间进行通信 由于需求的变化 应该有多个服务器实例 这会导致同一管道名上有多个 侦听器 但似乎有一个问题 这些侦听器中只有一个会收到消息 其他所有实例都不会收到消息 有某种
  • Python 从装饰器导入模块

    我正在使用 Python 3 开发一个应用程序 而且我所做的事情是非常规的 cx Oracle 是一个很难设置的模块 对于我的应用程序来说是一个可选的依赖项 我想做的是将模块的导入包装在装饰器中 仅放置在使用它的函数之上 这将避免必须在我的
  • 递增循环的致命错误

    目前 我正在尝试创建一个函数 在 Fighter cpp 文件中的函数 sortFighters 中对充满战斗机的向量进行排序 一切似乎都可以正确编译 但是 当它运行时 我在上述 cpp 文件的某一行中收到致命错误 我确切地知道问题是什么
  • 未添加 NuGet 包的参考

    我有一个自定义 NuGet 包 My Resources 其中包含程序集和对另一个自定义 NuGet 包 My Base 的依赖项 如果我安装该软件包 安装会成功完成 但不会添加程序集引用 这是完整的输出Install Packagecom
  • 矩阵列表乘以标量,Rcpp 中不保留维度属性

    我正在使用 Rcpp 来加速一些 R 代码 实际上这是我 2014 年 待办事项 列表中的项目之一 部分代码包括将矩阵列表乘以标量 我能够得到结果 尽管如此 矩阵不再是矩阵 而是向量 我想要一个矩阵列表作为最终输出 这是我到目前为止的代码