PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
R_Language
[問題] 迴圈的計算(小複雜)
作者:
empireisme
(empireisme)
2019-11-25 12:34:01
我本身使用R大概一兩年
目前想要寫出一個小function可以計算出以下的公式
https://imgur.com/supH7mE
d 是要計算出來的向量 長度是m
A 是一個矩陣維度是n*m,裡面的元素都是正的
alpha是A矩陣的元素
p 是一個向量長度為m 其為機率向量 裡面的元素相加等於1
以下是我的程式碼,雖然檢查過很多次,但不確定有沒有算錯
或是有沒有辦法用矩陣的方式去計算之,因為這樣算太慢了
set.seed(1)
m=10
n=7
A <- matrix( rexp(m*n),ncol=m ,nrow=n )
p <- c( 0.05,0.1,0.3,0.05,0.05,0.05,0.07,0.03,0.2,0.1)
sum(p )
length(p )
den <- rep(0,n)
densum <- rep(0,n)
d<- rep(0,m)
for(j in 1:m){
for(i in 1:n){
den[i]<- sum(A[i,]*p)
densum[i]<- A[i,j]*p[j]/den[i]
d[j]<- sum( densum )
}
}
下面是我算出來的
[1] 0.336093550 0.855872710 2.158927311 0.233847299 0.282627585
[6] 0.253739688 0.517757929 0.312419250 0.760612933 1.288101743
作者:
andrew43
(討厭有好心推文後刪文者)
2019-11-25 13:44:00
sum(densum)不應該和for(i)同層你先想一下j=1;i=1時densum是什麼就能明白有問題
作者:
celestialgod
(天)
2019-11-25 14:09:00
https://pastebin.com/TsASfKP4
其實它就只是每個i都取代一個d[j] 但是最後一個i才會填一次正確值XD 是不影響結果拉...這個問題用sweep / colSums / rowSums就能解決了原po再自己看一下我上面貼的程式~ 有問題再發問
作者:
andrew43
(討厭有好心推文後刪文者)
2019-11-25 14:15:00
嗯後來發現了謝謝
作者:
celestialgod
(天)
2019-11-25 14:27:00
不算寫錯 但是就多了不少操作 是可以省掉的這種情況建議拿 2 x 2的矩陣來驗算會好一點sweep正如它字面上的意思就掃過去...自己玩玩看吧
作者:
andrew43
(討厭有好心推文後刪文者)
2019-11-25 14:39:00
只看式子,確實多算很多。rowSums colSums先練練看
作者:
a78998042a
(Benjimine)
2019-12-01 09:32:00
temp = t(A)*pden = colSums(temp)r2 = t(temp)/dend = colSums(r2)快一點,記憶體用量少一些
作者:
asdiy
(燈火闌珊)
2018-01-01 00:04:00
我的寫法是 simple=function(A,p){t=p/apply(A,1,function(x)x%*%p);apply(A,2,function(x)x%*%t} 做 10000*10000矩陣是4秒
繼續閱讀
[問題] taskscheduleR
jerkoffme
[問題] 關於爬蟲-抓取資料日期
hank830214
[問題] 篩選符合條件的資料
AndrewShi
[問題] 搜尋字串的位置回傳
eco100
[問題] 取代字元比較有效率的寫法
eco100
[問題] ggplot疊圖
AndrewShi
[問題] multiple proportion test
sodboy
[問題] 用R跑Simulated Method of Moment
AmuroRai
[問題] 下載氣象局監測站CSV檔
j2225653
Re: 重複取樣不放回(不使用sample)
celestialgod
Links
booklink
Contact Us: admin [ a t ] ucptt.com