首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行矩阵*向量乘法,并将此结果传递给R中的TMB中的向量?

如何进行矩阵*向量乘法,并将此结果传递给R中的TMB中的向量?
EN

Stack Overflow用户
提问于 2020-05-04 19:35:04
回答 1查看 223关注 0票数 1

我需要做一个矩阵*向量乘法,它只生成一个数字,并将它传递给一个向量(但它在下面注释的代码中不起作用)。到目前为止,我得到的是:

cpp代码

代码语言:javascript
复制
#include <TMB.hpp>
template<class Type>
Type objective_function<Type>::operator() ()
{
  DATA_MATRIX(U); // id x 2 matrix
  DATA_MATRIX(Z); // n x 2 matrix
  matrix<Type> Z1_m1 = matrix<Type>(Z.row(0))*vector<Type>(U.row(0));
  REPORT(Z1_m1); // works
  vector<Type> ZZ(6);
  // ZZ(0) = matrix<Type>(Z.row(0))*vector<Type>(U.row(0)); // HOW TO FIX IT??
  // (This is a small code, which the real application run inside a for loop, and the row indices will be given by for)
  REPORT(ZZ);
  return 0;
}

R码

代码语言:javascript
复制
require(TMB)
set.seed(232)
model_data = list(U = matrix(c(9,11,2,4), ncol = 2),
                  Z = matrix(c(1,2,3,4,5,6, rpois(6,2)), ncol=2))
model <- "mult"
compile(paste0(model, ".cpp"))
dyn.load(dynlib(model))
m1 = MakeADFun(data=model_data, parameters=list(),type="Fun",
                  checkParameterOrder=FALSE,DLL=model)
print(m1$report())  # Note: order of variables NOT the same as .cpp file

有什么帮助吗?

我已经把这个问题发到TMB用户组上了。如果解决方案首先出现在那里,我会在这里张贴它。

EN

回答 1

Stack Overflow用户

发布于 2020-05-05 17:24:08

我将在TMB用户组中@Bob之后在这里发布我的解决方案

代码语言:javascript
复制
#include <TMB.hpp>
template<class Type>
Type objective_function<Type>::operator() ()
{
  DATA_MATRIX(U); // id x 2 matrix
  DATA_MATRIX(Z); // n x 2 matrix
  vector<Type> ZZ(6);
  // ZZ(0) = (Z.row(0).array()*U.row(0).array()).sum();
  REPORT(ZZ);
  return 0;
}

这是低效的,因为它是一个数组元素的乘法。如果是矩阵乘法会运行得更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61600152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档