避免在嵌套循环中声明过多相同的Rcpp列表元素。
创始人
2024-12-17 11:00:26
0

可以将列表中相同的元素声明放在外层循环中,减少重复声明。例如:

#include 
using namespace Rcpp;

// 嵌套循环
// 在内层循环中重复声明相同的Rcpp列表元素
// 需要优化
// [[Rcpp::export]]
NumericVector nestedLoopWithRepeatedListElements(NumericMatrix x, NumericMatrix y) {
  int n = x.nrow(), m = y.ncol();
  NumericVector ans(n);
  for(int i = 0; i < n; i++) {
    Rcpp::List tmp(m); // 重复声明
    for(int j = 0; j < m; j++) {
      tmp[j] = NumericVector(m); // 重复声明
    }
    for(int j = 0; j < m; j++) {
      for(int k = 0; k < m; k++) {
        tmp[j][k] = x(i, j) * y(k, j); // 计算
      }
    }
    for(int j = 0; j < m; j++) {
      ans[i] += sum(tmp[j]); // 累加
    }
  }
  return ans;
}

// 优化后的代码
// 在外层循环中声明列表元素,避免重复声明
// [[Rcpp::export]]
NumericVector nestedLoopWithOptimizedListElements(NumericMatrix x, NumericMatrix y) {
  int n = x.nrow(), m = y.ncol();
  NumericVector ans(n);
  Rcpp::List tmp(m); // 声明列表元素
  for(int j = 0; j < m; j++) {
    tmp[j] = NumericVector(m); // 声明列表元素
  }
  for(int i = 0; i < n; i++) {
    for(int j = 0; j < m; j++) {
      for(int k = 0; k < m; k++) {
        tmp[j][k] = x(i, j) * y(k, j); // 计算
      }
    }
    for(int j = 0; j < m; j++) {
      ans[i] += sum(tmp[j]); // 累加
    }
  }
  return ans;
}

相关内容

热门资讯

玩家交流((wepower德州... 玩家交流((wepower德州))外挂透明挂辅助工具(脚本辅助挂)一直真的有挂(可靠技巧)-知乎1、...
科技通报((aapOKER))... 科技通报((aapOKER))外挂透明挂辅助插件(脚本辅助挂)原来真的有挂(解密教程)-头条;1、系...
带你了解((wPk))外挂透明... 带你了解((wPk))外挂透明挂辅助黑科技(智能ai代打)本来真的有挂(细节方法)-今日头条1、操作...
分享一款((约局互娱))外挂透... 分享一款((约局互娱))外挂透明挂辅助挂(wpk辅助)一般真的有挂(2025新版教程)-头条;1、下...
揭秘攻略((AAPOKER))... 揭秘攻略((AAPOKER))外挂透明挂辅助器(黑科技辅助)原来真的有挂(科技教程)-今日头条;该软...
一分钟了解((wePOke))... 一分钟了解((wePOke))外挂透明挂辅助工具(透视辅助挂)就是真的有挂(详细教程)-头条1)辅助...
科普((聚星扑克))外挂透明挂... 科普((聚星扑克))外挂透明挂辅助工具(透视辅助挂)一般真的有挂(普及教程)-头条1、完成透视辅助安...
玩家必看攻略((WEPOke)... 玩家必看攻略((WEPOke))外挂透明挂辅助神器(德州辅助)的确是有挂的(解密教程)-小红书;1)...
今日公布((菠萝德州app))... 今日公布((菠萝德州app))外挂透明挂辅助APP(德州辅助)好像真的有挂(揭秘教程)-抖音1、全新...
玩家必备科普((aapOker... 玩家必备科普((aapOker))外挂透明挂辅助器(智能ai代打)一贯真的有挂(存在挂教程)-微博热...