[问题] for loop 加速

楼主: totolink (吐吐林克)   2020-07-11 15:05:15
大家好,目前正在进行某项统计实作。
简单来说我已写好一个函数,输入一个数字会输出一个向量(长度为6)
这个动作要操作1000次
将每次输出的向量合并成资料集
(1000列*6行)
一般来说我习惯用for loop解决
先开好一个1000*6的矩阵
用for loop 把函数重复执行1000次
将第i次的结果塞入矩阵第i列
但因为函数的计算量庞大,用循环速度超级慢
上网查apply家族的用法感觉是针对一个资料集进行同步运算,不符合我想将每次计算结果存进矩阵的动作
请问是否有更快的方式能完成这种工作呢?
另外我有尝试用
compiler::cmpfun将函数编译
但速度比原函数更慢...
作者: hank830214 (hank)   2020-07-11 15:23:00
lapply + do.call + rbind.data.frame?
作者: Gjerry   2020-07-11 19:02:00
试着做向量运算,或者平行化你的程式
作者: hajebio (jhc)   2020-07-11 20:21:00
input 存成list 用mapply 跑试试
作者: andrew43 (讨厌有好心推文后删文者)   2020-07-11 21:33:00
若没有保密问题,可把function贴出来,从function最佳化开始,甚至再一并考虑向量运算。否则,直接考虑平行运算也可以。
作者: khaos (出来混的...)   2020-07-12 00:20:00
不能split→apply→combine??
作者: whs2009 (欧森)   2020-07-12 20:54:00
dopar foreach?
作者: celestialgod (天)   2020-07-13 00:23:00
贴程式出来看吧 这样只能通灵啊
作者: asdiy (灯火阑珊)   2020-07-21 00:41:00
施主,你要问你的函数 是不是有相关没相关可以直接用foreach 或者 parapply 这种平行速度比较快,如果有相关 那你就没办法用平行了

Links booklink

Contact Us: admin [ a t ] ucptt.com