Re: [程式] R 基本迴圈的兩個問題

看板Statistics作者 (I-20快點來)時間15年前 (2010/05/17 17:13), 編輯推噓1(1010)
留言11則, 3人參與, 最新討論串2/2 (看更多)
抱歉 我想我把問題說的更清楚好了

05/17 07:16,
這要看你怎麼寫 f(x,y) 了, 寫得好的話可以用 sapply ??
05/17 07:16

05/17 09:12,
我想是你產生t(Q)的f(X,Y)寫的方式無法處理X, Y vectors
05/17 09:12

05/17 09:14,
以你的例子,可用outer(X, Y, FUN="*")來替代雙重迴圈式
05/17 09:14

05/17 09:28,
令函數f=function(a,b){a*b+8},outer(x, y, "f")。
05/17 09:28

05/17 13:44,
你的f()??
05/17 13:44
函數 f(x,y) 其實應該是 f(x1 , x2 , x3 , y1, y2) f 蠻複雜的 其中包含積分 微分還有估計nonparametric mean的函數 之前的 X[i], i = 1...n 應該是 X[i,1] , X[i,2], X[i,3] 一個 n ×3 的 matrix Y[j], j = 1...m 應該是 Y[j,1] , Y[j,2] 一個 m ×2 的 matrix 我希望的 P[i,j] <- f( X[i,1] , X[i,2] , X[i,3] , Y[j,1], Y[j,2] ) outer 雖好 不過他似乎不能用在 matrix 上? (d大 r大 提供的指令 outer(x, y, "f") 的確很好 不過似乎 x , y 只能是 vector?? 我嘗試用 split下去拆解 X Y 還是無法作用) m大 我嘗試寫了兩圈apply混在一起 運算時間大概變成原本的1/3 不過還是很慢 如果能用類似outer的指令就會非常快 不知板上前輩能否賜教 <(_ _)> 非常感謝 PS: C大 我的 f(x1 , x2 , x3 , y1, y2) 長很醜 是以下的形式 -[x1 - U(x2 , x3)]*[ g(x3) / g(x2, x3)] * d h(x2, y1, y2)/dx2 + l(x3,y1,y2) U(.,.) 是nonparametric mean function , h(., . ,.) 是 kernel和其他函數相乘 g 是 density kernel , l 是 ∫ U(x2,.)*h(x2,.,.) dx2 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.9.224 ※ 編輯: laba1014 來自: 61.230.9.224 (05/17 17:18) ※ 編輯: laba1014 來自: 61.230.9.224 (05/17 17:19) ※ 編輯: laba1014 來自: 61.230.9.224 (05/17 17:20)

05/17 22:03, , 1F
R本身就很慢,想要變快的話無非幾種方式,一個是演算法,
05/17 22:03, 1F

05/17 22:03, , 2F
還有就是運用R最大的特性: vectorization
05/17 22:03, 2F

05/17 22:04, , 3F
把你的運算可以vector化的盡量vector化,這樣算起來可改進
05/17 22:04, 3F

05/17 22:05, , 4F
很多,另外,apply系的function我覺得對提升速度可能沒多大
05/17 22:05, 4F

05/17 22:05, , 5F
幫助,因為他們也只是包起來的loop
05/17 22:05, 5F

05/17 22:07, , 6F
原po有試過sweep嗎?我的經驗是他比apply系的更能提升速度
05/17 22:07, 6F

05/18 09:26, , 7F
-[x1 - U(x2 , x3)]*[ g(x3) / g(x2, x3)] 和j無關
05/18 09:26, 7F

05/18 09:27, , 8F
d h(x2, y1, y2)/dx2 和 l(x3,y1,y2) 可以獨立計算.
05/18 09:27, 8F

05/19 05:05, , 9F
嗚嗚嗚 謝謝大家的幫忙 我成功把計算時間壓縮到我理想的
05/19 05:05, 9F

05/19 05:06, , 10F
狀況了
05/19 05:06, 10F

05/19 05:06, , 11F
太感激了
05/19 05:06, 11F
文章代碼(AID): #1ByGZFHk (Statistics)
文章代碼(AID): #1ByGZFHk (Statistics)