楼主: 子衿1219
1128 4

[问答] 矩阵列的操作 [推广有奖]

  • 1关注
  • 4粉丝

讲师

70%

还不是VIP/贵宾

-

威望
0
论坛币
60 个
通用积分
1.0023
学术水平
2 点
热心指数
0 点
信用等级
1 点
经验
13521 点
帖子
326
精华
0
在线时间
431 小时
注册时间
2012-3-19
最后登录
2018-7-8

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
QQ图片20160315195104.png
如图所示,有没有可以快速得到 39,66,99 的方法,因为当我列很多的时候,相当于做 p*(p-1)/2次相加。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:如图所示 有没有 如图所示

沙发
stzhao 在职认证  发表于 2016-3-15 21:28:09 |只看作者 |坛友微信交流群
  1. x <- matrix(1:9, 3)
  2. n <- ncol(x)
  3. colprod <- vector(length = n)
  4. for (i in 1:(n-1)) {
  5.   for (j in (i+1):n)
  6.     colprod <- colprod + x[,i]*x[,j]   
  7. }
  8. colprod
复制代码

使用道具

藤椅
cheetahfly 在职认证  发表于 2016-3-16 09:54:12 |只看作者 |坛友微信交流群
楼上同学的解决方案中有一个小错误,代码的第三行应该是:
colprod <- vector(length = nrow(x))
可能是编的快,疏忽了。

楼主的这个问题,我尝试用向量化来解决,发现力不从心。该问题似乎是循环起来很简单,但是向量化非常吃力的那种问题,并且,该问题的计算量随着列数的增长而呈现几何级数地增加的。在我的电脑中,当列数过1000后,耗时就比较明显了。于是,我想用Rcpp包的C++程序来解决这个问题:
  1. # 需安装和配置Rtools工具
  2. library(Rcpp)
  3. cppFunction('NumericVector colprodC(NumericMatrix x) {
  4.   int nrow = x.nrow(), ncol = x.ncol();
  5.   NumericVector out(nrow);

  6.   for (int i = 0; i < (ncol - 1); i++) {
  7.     for (int j = (i + 1); j < ncol; j++) {
  8.       for (int r = 0; r < nrow; r++) {
  9.         out[r] += x(r, i) * x(r, j);
  10.       }
  11.     }
  12.   }
  13.   return out;
  14. }')

  15. colprodC(mat)
复制代码
在我的电脑上运行,速度提升大概36倍左右,不是很让人满意,是不是我的程序还有问题,请大神指点。



使用道具

板凳
子衿1219 发表于 2016-3-16 16:48:59 |只看作者 |坛友微信交流群
stzhao 发表于 2016-3-15 21:28
谢谢。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-2 01:04