我正試圖將一些代碼從matlab翻譯成R.
。如果有必要的話。完整的matlab代碼可以在這里查看,STARTIN 46行,"動態感知"。https://github.com/rssmith33/Active-Inference-Tutorial-Scripts/blob/main/Pencil_and_paper_exercise_solutions.m
如果需要的話,背景:主動推理的紙筆例子(類似預測編碼,它本質上是近似貝葉斯推理...)。https://psyarxiv.com/b4jm6/ 在第135頁
我的問題
我的問題是:
我是個新手,但我能夠在R中完全復制matlab腳本的數學(基本上是近似貝葉斯),而不做回圈,現在我想復制這個回圈。
在matlab代碼中說:
>% observations = vectors!
o{1,1} = [1 0] ';
o{1,2} = [0 0] ';
o{2,1} = [1 0] ';
o{2,2} = [1 0] '。
在matlab的回圈中,例如說:
% likelihood。
lnAo = nat_log(A'*o{t,tau})。
因此,o{x,y}作為上層o{x,y}矢量的索引,或者在我的例子中:t(即時間步長)和tau:
o{t,tau}其中t=時間步長{1,}或{2,},tau是上層o{ , }的{,1}或{,2}
對于沒有回圈的數學計算,到目前為止,我使用了這些:
對于沒有回圈的數學計算,我使用了這些:
# true observation at t-1
o11 = c(1, 0)
o12 = c(0, 0)
# 在t-2的真實觀察。
o21 = c(1, 0)
o22= c(0, 1)
# 我把它用在這樣的地方,我手動把右邊的o{x,y}加到公式里。
st2all = ... ... ((log(t(A))%*%o22))
我想我可以把我的 "o12 "的最后一個字符作為tau,把倒數第二個字符作為t(時間)并以某種方式定義它,但是如何定義(以及是否有意義)?
或者在R中是否有一個優雅的等價函式?
預先感謝!
uj5u.com熱心網友回復:
也許這就像Matlab中的cell結構
> o < - matrix(list(c(1, 0), c(0, 0) 。c(1, 0), c(1, 0) ), 2, byrow = TRUE)
> o[[1, 1]]/span>
[1] 1 0
> o[[1, 2]]/span>
[1] 0 0
> o[[2, 1]]/span>
[1] 1 0
> o[[2, 2]]/span>
[1] 1 0
uj5u.com熱心網友回復:
你是否在尋找一種方法,根據t和tau的值來回傳o的值,因此你可以很容易地將這段代碼放入一個回圈中?如果是這樣,你可以定義一個函式o(t, tau),回傳上面Matlab例子中給出的值。
注意t()是R中的轉置函式,所以我使用變數名稱timestep而不是t。你可以定義一個名為t的變數,但這樣你就無法呼叫這個函式,而且看起來你需要轉置矩陣來轉置你的Matlab的其他代碼。
這里有一個函式o(timestep, tau)可以得到你想要的結果:
o < - function(timestep,tau){>
# 默認回應是c(1,0)
結果 < - c(1,0)
# response is c(0,0) iff t==1 and tau ==2
if (timestep == 1 & tau == 2) result < - c(0,0)
return (result)
}。
下面是一個簡化的例子,兩個嵌套回圈將遍歷1和2的所有組合,用于timestep和tau,呼叫我們的函式o()并做一些簡單的數學示范:
# set up a starting value for demonstration.
x < - c(1,1)
# loop over all values of 1 and 2 for t and tau
for(timestep in 1。 2){
for (tau in 1。 2){
# 每次迭代,呼叫我們的函式`o`,并做一些數學運算< - sqrt(x) o(timestep, tau)
}
}
當然,你的回圈中的數學將看起來不同,因為你正在做更復雜的事情。
uj5u.com熱心網友回復:
我通過https://www.latecnosfera.com/2016/05/matlab-cell-arrays-equivalent-in-r.html
想出了其余的東西。o < -向量("list"/span>。 長度 = 2 * 2 )
dim(o) < - c(2。 2)
o
o[[1。 1]] < - c(1。 0)
o[[1。 2]] < - c(0。 0)
o[[2。 1]] < - c(1。 0)
o[[2。 2]] < - c(0。 1)
# 到目前為止,這已經成功了,現在回圈應該不會有太大的問題,我希望。 :)
st2all2 = ..... ((log(t(A) nzlog)%*%o[[2。 2]]))
感謝所有的幫助!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/326922.html
標籤:
上一篇:通過當前表單實體傳遞給另一個類
