[問題] 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